2009-06-22 11 views
5

Mam sytuację, w której mogłem naprawdę skorzystać z posiadania systemu podobnego do memcached, ale z możliwością przechowywania (dla każdego klucza) posortowanej listy elementów i modyfikowania listy przez dodanie wartości.Czy jest coś podobnego do memcached, ale do posortowanych list?

Na przykład:

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') 

Które I wtedy można wykorzystać tak:

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 

wymagany system pozwoli mi łatwo dostać przedmiotów liczyć w każdej tablicy i pobrać żadnych liczbę wartości z tablica, przy założeniu, że wartości są sortowane przy użyciu dołączonej wartości.

Mam nadzieję, że opis jest przejrzysty. Pytanie jest stosunkowo proste: czy istnieje taki system?

Odpowiedz

4

Redis obsługuje zarówno listy, jak i zestawy.Możesz wyłączyć zapisywanie dysku i używać go jak Memcached zamiast przechodzenia na MongoDB, który zapisałby dane na dysku.

6

Spójrz na MongoDB. Korzysta z plików mapowanych w pamięci, jest więc niesamowicie szybki i powinien działać na poziomie porównywalnym z MemCached.

MongoDB to baza schematu mniej, które powinny wspierać czego szukasz (indeksowanie/sortowania)

+0

Jak rozumiem dokumenty, sortowanie odbywa się w czasie pobierania, co nie jest zbyt pomocne dla mnie - nawet przy użyciu pamięciowej pamięci, sortowanie 1 miliona elementów, używając wartości tekstowych do 200 znaków będzie raczej powolne. Ale może się pomyliłem - sprawdzi dokumentację dogłębnie. –

3

MongoDB zmieści. Co ważne, to ma indeksów, dzięki czemu można dodać indeks tytuł do kolekcji tematów, a następnie odzyskać przedmioty posortowane według wskaźnika:

db.topics.ensureIndex({"title": 1}) 
db.topics.find().sort({"title": 1}) 
0

dlaczego nie przechowuje tablicę w memcached? przynajmniej w Pythonie i PHP memcached API obsługują to (myślę, że python używa pikle, ale na pewno nie pamiętam).

jeśli potrzebujesz stałego przechowywania danych lub tworzenia kopii zapasowych, memcacheDB używa tego samego interfejsu API.

podstawowym przykładem pseudopython:

coraz przechowywane dane przechowywane = cache.get (storedDataName) lista

initialize jeśli nie przechowywanej jakiej dotąd if (przechowywanej == None): zapisany = {}

---------------- Znalezienie przechowywane przedmioty

try: alreadyHaveItem = przechowywane [itemKey] wyjątkiem rzucony wyjątek KeyError: print 'nie wynik w pamięci podręcznej'

--------------- - dodanie nowych elementów

dla pozycji w newItemsDict: przechowywane [artykuł] = newItems [artykuł]

---------------- zapisywanie wyników w pamięci podręcznej cache.set (storedDataName, zapisany, TTL)

+0

, ponieważ trudno jest posortować listę na wypadek, gdybyśmy mieli więcej niż jeden proces dodawania do niej elementów –

+0

, moglibyśmy również zachować listę dyktów lub nawet obiektów, lub a/kilka posortowanych list kluczy dla takich obiektów. .etc ... i użyj sortowania wstawiania ... robię tego rodzaju rzeczy dla rankingów użytkowników. faktycznie mam wiele procesów, które zrzucają zadania do tej samej kolejki (która jest również przechowywana w memcached), a następnie są przetwarzane w kolejności, skutecznie tworząc jedno źródło do wstawienia ... tak, jestem pewien, że znasz swoją przestrzeń problemu lepiej niż Ja, nie mogę całkiem określić złożoności z tego, co napisałeś. powodzenia –

+0

Właściwie można po prostu sortować po stronie klienta i CAS bezpiecznie, bez względu na współbieżność. Oto kilka strategii, aby coś takiego zrobić. – Dustin

Powiązane problemy