Есть ли что-то вроде memcached, но для отсортированных списков? - PullRequest
5 голосов
/ 22 июня 2009

У меня есть ситуация, когда мне действительно может быть полезно иметь систему, подобную memcached, но с возможностью сохранять (для каждого ключа) отсортированный список элементов и изменять список путем добавления значений.

Например:

something.add_to_sorted_list( 'topics_list_sorted_by_title', 1234, 'some_title')
something.add_to_sorted_list( 'topics_list_sorted_by_title', 5436, 'zzz')
something.add_to_sorted_list( 'topics_list_sorted_by_title', 5623, 'aaa')

Который тогда я мог бы использовать так:

something.get_list_size( 'topics_list_sorted_by_title' )
// returns 3
something.get_list_elements( 'topics_list_sorted_by_title', 1, 10 )
// returns: 5623, 1234, 5436

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

Я надеюсь, что описание понятно. И вопрос относительно прост: есть ли такая система?

Ответы [ 4 ]

6 голосов
/ 22 июня 2009

Взгляните на MongoDB . Он использует файлы с отображением в памяти, поэтому он невероятно быстр и должен работать на сравнительном уровне с MemCached.

MongoDB - это база данных без схемы, которая должна поддерживать то, что вы ищете (индексирование / сортировка)

4 голосов
/ 25 апреля 2010

Redis поддерживает списки и наборы. Вы можете отключить сохранение на диск и использовать его как Memcached вместо использования MongoDB, который будет сохранять данные на диск.

3 голосов
/ 30 июня 2009

MongoDB подойдет. Что важно, у него есть индексы, поэтому вы можете добавить индекс по заголовку для коллекции тем, а затем извлечь элементы, отсортированные по индексу:

db.topics.ensureIndex({"title": 1})
db.topics.find().sort({"title": 1})
0 голосов
/ 01 июля 2009

почему бы просто не сохранить массив в memcached? по крайней мере, в python и PHP API-интерфейсы memcached поддерживают это (я думаю, что python использует pickle, но точно не помню).

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

пример базового псевдопиона:

получение сохраненных данных хранятся = cache.get (storedDataName)

инициализировать список, если вы ничего не сохранили ранее если (хранится == None): хранятся = {}

---------------- поиск хранимых предметов

попробовать: alreadyHaveItem = сохранены [ItemKey] кроме KeyError: выведите 'no result in cached'

---------------- добавление новых предметов

для элемента в newItemsDict: сохранено [item] = newItems [item]

---------------- сохранение результатов в кеш cache.set (storedDataName, хранение, TTL)

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