Какой самый эффективный механизм обработки документов ориентирован на базу данных для хранения тысяч документов среднего размера? - PullRequest
7 голосов
/ 23 февраля 2011

MongoDB или Redis?

Я слышал, что я должен сохранять небольшие коллекции в MongoDB, чтобы обеспечить лучшую индексацию (и индексы подгоняются под ОЗУ), и я слышал, что redis "работает очень быстро", но MongoDB лучше, если у вас есть большие коллекции.

Что является наиболее эффективным, если у меня есть несколько тысяч коллекций, скажем, несколько тысяч хешей?

Я спрашиваю об этом, потому что в моем проекте слишком рано иметь доступные данные для бенчмаркинга, и я, вероятно, разработал бы плохие сценарии бенчмарков, потому что я не очень хорошо понимаю теоретические концепции этих двух механизмов баз данных, особенно Redis.

Спасибо всем, кто ответит.

Ответы [ 5 ]

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

Очень сильно зависит от конкретного варианта использования.Если вы хотите, чтобы ваши документы могли запрашивать что-то, кроме их идентификатора, вам не следует выбирать Redis.С Redis вам придется реализовать собственную схему индексации, а это просто не нужно.

На самом деле очень мало случаев, когда Redis был бы лучшим вариантом для того, что я считаю вашим вариантом использования (не то, что с Redis что-то не так, я часто использую и Redis, и Mongo, но для разных целей).Мне кажется, что у вас есть объекты, которые можно представить в виде хэшей.Как Mongo, так и Redis могут хранить хэши, но Mongo может делать гораздо больше.С Mongo вы можете искать документ по любому из его полей, вы можете добавить индекс, чтобы ускорить его, и поле даже не должно быть строкой, это может быть число, дата, список, даже документ(или список документов), и все документы не должны помещаться в ОЗУ (хотя это изменится, когда функция хранилища дисков Redis будет завершена).У Redis этого нет.Вам нужно было бы реализовать индексы самостоятельно, чтобы иметь возможность поиска, вы не можете хранить что-либо, кроме строк (иногда это действительно неудобно), и вы не можете хранить ничего, кроме плоских хэшей (не прибегая к реализации или использованию какого-либо отображения).слой типа Ом ).

Вы также упоминаете скорость.Redis невероятно быстр, и Mongo тоже неплох, но для вашего случая использование Mongo может быть быстрее.Заметьте, я говорю , используя Mongo, но не сам Mongo будет быстрее.Дело в том, что если вы пользуетесь Redis и по-прежнему хотите иметь возможность искать документ по полю, не являющемуся первичным ключом, вам, как я уже упоминал выше, придется реализовать это самостоятельно.Поиск тогда должен будет сделать по крайней мере два запроса к Redis, один для поиска в индексе и один для получения документа.Если поиск приводит к более чем одному документу, вам нужно будет сделать запрос для каждого документа в отдельности.Затраты на выполнение всех этих запросов, вероятно, сделают использование Redis хуже, чем использование Mongo.По моему опыту, все, кроме самого простого кеша, очереди или чего-либо подобного, должно отправлять в Redis более одного запроса, чтобы получить все необходимое.

Итак, имея в своем распоряжении ограниченную информацию, я рекомендую MongoDB.

4 голосов
/ 23 февраля 2011

Mongodb должно быть хорошо для этого:

http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

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

Я добавлю еще одну опцию в кольцо: Berkeley DB XML .Это небольшая библиотека C ++ с API-интерфейсами C ++ и Java, которые обеспечивают управление данными XML, запросы XQuery и XPath.Он разработан, чтобы быть очень быстрым, масштабируемым и надежным.Поддерживает транзакции, восстановление и репликацию.Вы можете использовать его для хранения документов XML, а также пар ключ-значение, отличных от SQL.

Отказ от ответственности: я менеджер по продуктам в Berkeley DB, поэтому я немного предвзят.Тем не менее, у нас есть много клиентов, которые используют BDB XML для средних и очень больших хранилищ документов.

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

Размер документа, хотя и важен, не должен быть для вас самым важным фактором при выборе Mongo или Redis. Редко вы достигнете предела 4 МБ в Mongo, и если вы это сделаете, это может быть индикатором того, что ваш документ недостаточно разбит. Redis немного более универсален, поэтому, если вы намереваетесь использовать свое хранилище данных для нишевых областей в состоянии вашего приложения (поля предложений, кэш и т. Д.), Redis может подойти лучше. Если сохраняются более богатые элементы, которые выходят за рамки собственных типов данных и структур Redis, вероятно, Mongo подойдет лучше.

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

0 голосов
/ 22 ноября 2017

Redis придумал вторичные индексы, которые теперь могут служить вашей цели. Ссылка: https://redis.io/topics/indexes

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