Использование реляционной базы данных для данных без схемы - лучшие практики - PullRequest
22 голосов
/ 16 ноября 2010

Прочитав шокирующую статью, написанную Бретом Тейлором (одним из создателей FriendFeed; текущий технический директор Facebook), Как FriendFeed использует MySQL для хранения данных без схемы , я началИнтересно, есть ли лучшие практики для использования СУБД, такой как Oracle, MySQL или PostgreSQL, для хранения и запроса данных без схемы?

Мало кому нравится признавать, что они используют реляционную базу данных, когда NoSQL - новая горячность, что затрудняет поиск хороших статей по теме.Как реализовать бессхемную (или «ориентированную на документы») базу данных в качестве слоя поверх реляционной базы данных?

Ответы [ 5 ]

8 голосов
/ 16 ноября 2010

это классическая статья в этом разделе: http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html (Использование MySQL в качестве NoSQL - история превышения 750 000 qps на обычном сервере)

3 голосов
/ 16 ноября 2010

Хранение данных без схемы в SQL в основном означает реализацию хранилища значений ключей, в котором SQL используется в качестве серверной части. Поскольку вы не используете никаких реляционных функций, а схема довольно тривиальна, вы не найдете много информации о проектировании баз данных SQL таким образом. Тем не менее, вы сможете найти множество более общей информации о разработке приложений для хранения значений ключей, которые будут применяться.

2 голосов
/ 24 февраля 2011

Я тщательно исследовал эту проблему.Довольно просто моделировать данные без схемы в СУБД с использованием таблицы «свойств» (по существу, с использованием пар ключ / значение).Сложная часть - это индексирование и запросы к вашим вещам.(По сути, вся сложность, с которой сталкивался Friendfeed, была сосредоточена вокруг этой проблемы.)

Если вы индексируете таблицу свойств, вы получаете индекс для всех свойств.Это нежелательно, так как добавляет слишком много накладных расходов, поскольку вам нужно запрашивать только определенные свойства.Также вам наверняка захочется получить доступ к вашим вещам через составные индексы.Моделировать составные индексы невероятно сложно.Единственные решения, которые я нашел, требуют, чтобы вы строили свои собственные индексы, используя схему только для этой цели - очень громоздко.Чем больше я смотрел на него, тем менее практичным он выглядел.

Хорошее решение этой проблемы заключается в использовании частичных индексов (иначе говоря, фильтрованных индексов).

1 голос
/ 24 января 2012

Инженеры Quora используют MySQL в качестве хранилища данных вместо NoSQL, таких как Cassandra, MongoDB, CouchDB и т. Д. . Они разделяют данные на уровне приложения , что означает, что они разделяют данные только при необходимости, сохраняют данные на одном компьютере, если это возможно, и используют хэш первичного ключа для разделения больших наборов данных между несколькими базами данных. Разделение данных на уровне приложения работает таким образом, что данные, отвечающие одному набору критериев, «передаются» в одну базу данных, в то время как данные, не соответствующие этим критериям (или, возможно, другому набору критериев), могут отправляться в другую базу данных

1 голос
/ 24 ноября 2010

Вы не найдете много на эту тему, потому что большинство людей создают решения для одной цели.Их решения разработаны для удовлетворения одной потребности очень хорошо.Базы данных NoSQL значительно облегчают создание этих специализированных хранилищ данных, но вы платите за отсутствие гибкости и некоторых встроенных элементов управления и функций безопасности СУБД.

...