комбинация mysql mongodb - PullRequest
       5

комбинация mysql mongodb

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

Я создаю веб-приложение, которое требует масштабируемости. В двух словах:

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

Сейчас я полностью собираю приложение в MongoDb, но у меня возникли проблемы. Например:

  • На главной странице мы получили список сообщений друзей пользователей, без проблем мы используем:

$ db-> messages-> find (array ('users._id' => array ('$ in' => $ userFriendListGoesHere)));

Итак, мы получили наши сообщения, однако после этого у каждого сообщения есть местоположение, поэтому я должен сделать цикл по всем сообщениям и получить местоположение из другой коллекции, а также несколько пользователей могут быть связаны с одним сообщением. Таким образом, мы также должны получить все пользовательские данные из другой коллекции, в MySql просто запрос соединения, в циклах MongoDb 2, и это мой первый вопрос: это проблема? Требуется ли для этого много ресурсов, циклы?

Так что моя идея состоит в том, чтобы разделиться с MySql и MongoDb, я использую MongoDb для хранения всех местоположений (так как это более 350 000+ местоположений и использую вычисления длиной в широту) и MySql для сообщения, пользователей и друзей пользователей, Итак, второй вопрос, можете ли вы помочь мне с моим решением, я должен продолжать использовать MongoDb с циклами? Или использовать комбинацию?

Спасибо за чтение и ваше время.

Ответы [ 2 ]

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

.. в MySql просто запрос на соединение, в MongoDb 2 цикла, и это мой первый вопрос: это проблема?

Это паритет для курса с MongoDB, фактически, это основной компромисс MongoDB.

MongoDB основан на принципе, что объединения не масштабируются. Таким образом, он не имеет никаких объединений и оставляет вас «катиться самостоятельно». Некоторые библиотеки, такие как Morphia ( для Java ), предоставляют встроенную логику для загрузки ссылок.

PHP имеет проект Doctrine , который должен помочь с этим.

Требуется ли для этого много ресурсов, цикл?

Вид? Это действительно будет зависеть от реализации.

Очевидно, что это будет включать в себя кучу взад-вперед с БД, но это может быть меньше сетевого трафика, чем версия SQL. Вам понадобится место в памяти для всех возвращаемых данных. Но опять же, это не сильно отличается от SQL.

На самом деле, вы должны сделать все компромиссы о том, как это реализовано и кто что хранит в памяти.

0 голосов
/ 12 мая 2015

я должен продолжать использовать MongoDb с циклами

MongoDB - отличная идея, когда ваши данные не по своей природе реляционные.

В приведенном вами примере кажется, что ваши данные являются реляционными. MySQL и другие реляционные БД (такие как Postgres) являются лучшими хранилищами данных, чем MongoDB для реляционных данных. Это сообщение в блоге охватывает эту тему более подробно.

В целом, я бы порекомендовал следующее:

  1. Пожалуйста, потратьте некоторое время на анализ того, являются ли ваши данные по своей природе реляционными или нет.
  2. Если это не так, то MongoDB может дать вам преимущества по сравнению с использованием MySQL.
  3. Если он реляционный, то MySQL - лучшее решение.
  4. Использование обоих, конечно, возможно, но это создаст дополнительную работу и сложность для вас. В долгосрочной перспективе - стоит ли это усилий? Только ты будешь знать ответ.

Удачи в вашем веб-приложении!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...