Может кто-нибудь объяснить, как мы реализуем простые хранилища ключей / значений с помощью MySQL?

http://royal.pingdom.com/2010/06/18/the-software-behind-facebook/:

Facebook использует MySQL, но в основном как постоянное хранилище с ключом-значением, перемещая соединения и логику на веб-серверы, поскольку там легче выполнять оптимизацию (на "другой стороне" слоя Memcached).

Может кто-нибудь объяснить, как мы реализуем простые хранилища ключей / значений с помощью MySQL? Это просто таблица с bigint в качестве первичного ключа + один столбец LONGTEXT?

2 ответа

Отправной точкой должно быть "ваши данные реляционные?" Если это так, используйте реляционную базу данных!

Ключ-значение - отличное решение для нереляционных данных, но если ваши данные являются реляционными, используйте SQL и покончите с этим.

Чтобы ответить на ваш первый вопрос, да, хранилище ключ / значение - это просто, вы храните ключ и значение, связанное с этим ключом. И вы делаете запрос на основе ключа.

Большие преимущества, которые вы получаете от этого,

  • Масштабируемость. Теперь вы можете легко распределять свои данные по многим (тысячам) машинам. Это то, что традиционная СУБД не очень хороша, соединения и гарантии кислотности на многих машинах либо невозможны, либо очень-очень медленные.

Facebook также имеет много данных, которые не соответствуют модели отношений, которую использует обычная СУБД, а именно графики. Это означает, что они сами запрашивают / хранят / обрабатывают графическую природу данных, а не обрабатывают с помощью SQL.

Стоимость такого подхода сложна, и часто вам приходится отказываться от нескольких пунктов свойств ACID.

Остальные из нас, это не facebook/google/linkedin/ и т. Д. что для работы с сайтами, насчитывающими до нескольких миллионов пользователей, обычно достаточно просто использовать традиционную базу данных.

Другие вопросы по тегам