Хранение данных в Redis и / или реляционной базе данных - PullRequest
2 голосов
/ 21 февраля 2012

У меня есть около 50 000 объектов json, которые я храню в Redis.Это хорошо работает для основного случая использования поиска объекта по его уникальному ключу.

Теперь мне нужно добавить функцию для поиска объектов на основе сложных запросов на основе данных объектов.Например, все товары с таким автором, как 'lex', опубликованные в период с 2011-03-01 по 2012-01-12, в наличии более 5 наименований.

С SQL это просто.Я не очень хорошо знаю Redis, но не видел ничего подобного для этого.

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

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

Является ли этот подход хорошей идеей?

Ответы [ 2 ]

5 голосов
/ 22 февраля 2012

Являются ли запросы динамическими?Потому что вы можете создавать структуры в Redis, делать запросы, как то, что вы описываете.Например, используйте упорядоченные наборы для времени, установите другой упорядоченный набор для инвентарных номеров, сделайте запрос и пересекайте их.Если вы точно знаете, какие поиски вы хотите выполнить, вы можете заставить Redis сделать это очень быстро для вас.Если запросы все время меняются (игра с данными, их анализ и т. Д.), То это не очень хорошее решение.

Так что для хранения чего-то

set key object1

zadd time_set object1.time object1
zadd inventory_set object1.inventory object1

для запроса времени и ресурсов

zrangebyscore time_set min_time max_time
zrangebyscore inventory_set min_inventory max_inventory

Then you intersect them yourself, since results are just ids this is really fast. Once you intersected them just do an

mget item1, item 2...

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

3 голосов
/ 22 февраля 2012

Вам нужна база данных документов (одно из предпочтений NoSQL).

Как и предположил @Sergio, MongoDB является одним из них. Есть и другие ( CouchDB , RavenDB и более), и вы должны проверить, какой из них подходит вам лучше всего. Они отличаются производительностью, способностями к репликации, стабильностью, зрелостью, поддержкой и т. Д.

...