Я работаю над функцией и мог бы использовать мнения о том, какую базу данных я должен использовать для решения этой проблемы.
У нас есть приложение Rails, использующее MySQL. У нас нет проблем с MySQL, и он отлично работает. Но для новой функции мы решаем, оставаться ли MySQL или нет. Чтобы упростить задачу, предположим, что существует модель User
и Message
. Пользователь может создавать сообщения. Сообщение доставляется другим пользователям на основе их связи с плакатом.
Очевидно, что существует ассоциация, основанная на дружбе, но существует гораздо больше ассоциаций, основанных на профиле пользователя. Я планирую хранить некоторые метаданные о плакате вместе с сообщением. Таким образом, мне не нужно извлекать метаданные каждый раз, когда я запрашиваю сообщения.
Таким образом, сообщение может выглядеть так:
{
id: 1,
message: "Hi",
created_at: 1234567890,
metadata: {
user_id: 555,
category_1: null,
category_2: null,
category_3: null,
...
}
}
Когда я запрашиваю сообщения, мне нужно иметь возможность запрашивать на основе нуля или более атрибутов метаданных. Этот вызов должен быть быстрым и происходит очень часто.
Из-за количества атрибутов метаданных и того факта, что любое число может быть включено в запрос, создание индексов SQL здесь не кажется хорошей идеей.
Лично у меня есть опыт работы с MySQL и MongoDB. Я начал исследовать Cassandra, HBase, Riak и CouchDB. Мне не помешала бы помощь людей, которые, возможно, провели исследование относительно того, какая база данных подходит для моей задачи.
И да, таблица сообщений может легко вырасти до миллионов или строк.