@recloudor

Кто знает замену MongoDB?

В mongoDB двухуровневая модель организации данных: коллекции > JSON документы.
Это ок для небольших ресурсов, скажем, для блога, где идут только посты.
А если у каждого пользователя свои посты? Все посты пихать в одну коллекцию или в один массив? Если нужно реализовать что-то более менее нормальное, приходится писать костыль на костыле.
Нужна хотя бы трёхуровневая модель.

Вставлять документ в коллекцию можно только в конец.
К примеру, вставляю пост в коллекцию, и мне нужно взять посты по дате добавления.
Можно конечно по поиску всё это сделать, либо же написать костыль со skip, limit.

Если бы можно было всё вставлять в начало коллекции, было бы намного проще.

MySQL? Potgresql? REDIS? Любая другая?
Подскажите, пожалуйста, кто знает лучшую альтернативу.
  • Вопрос задан
  • 1285 просмотров
Пригласить эксперта
Ответы на вопрос 5
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
В чем проблема-то? Вы что-то не то делаете, и проблема не в монго, а как говорится в прокладке между стулом и монитором.

коллекция юзеры -> id, email, password
коллекция посты -> id, user_id, post_content

var user = users.find(1);
var posts_by_user = posts.find({ user_id: user._id });
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Ну могу посоветовать, как альтернативу, Elasticsearch. Но, боюсь, она вам еще больше не понравится, хотя на мой взгляд очень даже. По моему, у вас просто что-то не то с организацией данных, да и какие проблемы выбрать последние 10 по дате? Это же обыкновенный поиск по индексу, все должно очень быстро работать.

PS.
recloudor: И да, как альтернативу сортировке, предлагаю использовать для этого REDIS. При добавлении поста в монгу, добавлять id поста дополнительно и в list REDIS.
rpush user_posts:id1234 321
Из редиса доставать ОДНИМ запросом идентификаторы последних n-записей
lrange user_posts:id1234 10 -1
Ответ написан
index0h
@index0h
PHP, Golang. https://github.com/index0h
А если у каждого пользователя свои посты? Все посты пихать в одну коллекцию или в один массив?

Почему же? Посты в одной коллекции - это вполне ок. Юзвери в другой коллекции это тоже ок.

Если нужно реализовать что-то более менее нормальное, приходится писать костыль на костыле.

Не пишите костыль на костыле, сначала спроектируйте БД так, что бы избежать этого.

Вставлять документ в коллекцию можно только в конец.

И в чем проблема (я вам по секрету: так происходит практически в каждой СУБД)? Какая вам разница, где оно будет вставляться? Делайте выборку с сортировкой.

К примеру, вставляю пост в коллекцию, и мне нужно взять посты по дате добавления.

RTFM

написать костыль со skip, limit.

Какой нехороший человек вам такую дичь сказал? Если у вас записей 10кк, у вас просто оперативки не хватит делать подобные выборки без skip/limit.

Если бы можно было всё вставлять в начало коллекции, было бы намного проще.

Вы пытаетесь вырвать гланды через анус, причем другого человека.

Подскажите, пожалуйста, кто знает лучшую альтернативу.

Еще раз, вы придумали проблему и пытаетесь ее героически решить, но проблема заключается в том, что вы не правильно используете средства предлагаемые mongo, и другая БД вам ни как не поможет
Ответ написан
@CybernatiC
Веб-разработчик
Чем Вас не устраивает MongoDB?
Мы как то делали сервис realtime на nodejs loopback + mongoDB
Много пользователей, миллионы записей, более 6000 запросов в секунду. И все летает
Ответ написан
sim3x
@sim3x
Potgresql
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы