2008-08-07 6 views
4

Warum gibt es in memcached eine hardcoded chunk limit (.5 meg nach der Komprimierung)? Hat irgendjemand sie neu kompiliert? Ich weiß, ich sollte nicht so große Brocken herumschicken, aber diese extra schweren Brocken passieren für mich von Zeit zu Zeit und richten Chaos an.Memcached chunk limit

Antwort

4

Diese Frage, die bei den official FAQ

What are some limits in memcached I might hit? (Wayback Machine)

Zitat sein: Sie werden wahrscheinlich mit memcache sind die Schlüssel und Artikel Größenbeschränkungen siehe

Die einfachen Grenzen. Schlüssel sind auf 250 Zeichen beschränkt. Die gespeicherten Daten darf nicht länger als 1 Megabyte groß, denn das ist die größte typische Plattengröße ist „

Die FAQ wurde nun überarbeitet und es gibt jetzt zwei getrennte Fragen dieser Abdeckung.

What is the maxiumum key length? (250 bytes)

Die maximale Größe eines Schlüssels beträgt 250 Zeichen.Beachten Sie, dass dieser Wert weniger ist, wenn Sie Client- "Präfixe" oder ähnliche Funktionen verwenden, da das Präfix auf der Vorderseite des ori angeheftet ist Schlüsselloch. Kürzere Schlüssel sind im Allgemeinen besser, da sie Speicher sparen und weniger Bandbreite verwenden.

Why are items limited to 1 megabyte in size?

Ahh, das ist eine beliebte Frage!

Kurze Antwort: Wegen der Funktionsweise des Algorithmus des Speicherzuordners.

Lange Antwort: Memcached Speicher-Engine (die steckbar/in der Zukunft ... eingestellt sein wird), verwendet eine Platten-Ansatz zum Speicher Management. Der Speicher wird in unterschiedlich große Blöcke aufgeteilt, beginnend bei einer minimalen Anzahl und aufsteigend durch einen Faktor bis zum maximal möglichen Wert .

Sagen der minimale Wert 400 Byte ist, und der Maximalwert ist 1 Megabyte und die faktorielle ist 1,20:

Bramme 1-400 Bytes Bramme 2-480 Bytes Bramme 3-576 Bytes etc ...

Je größer die Platte ist, desto größer ist der Abstand zwischen der Platte und der vorherigen Platte . Je größer der Maximalwert ist, desto weniger effizient ist der Speicher. Memcached muss auch einige Speicherplätze für jeder vorhandenen Platte vorbelegen, so dass die Einstellung einer kleineren Fakultät mit einem größeren Wert von noch mehr Aufwand erfordert.

Es anderen Grund ist, warum Sie würden das nicht tun wollen ... Wenn wir sprechen über eine Web-Seite sind und Sie versuchen, speichern/Lastwert , dass große, sind Sie wahrscheinlich zu tun etwas stimmt nicht.Bei dieser Größe dauert es eine merkliche Menge Zeit, um die Datenstruktur in den Speicher zu laden und zu entpacken, und Ihre Site wird wahrscheinlich nicht sehr gut funktionieren.

Wenn Sie wirklich als 1MB wollen Elemente speichern, größer, können Sie mit einem bearbeiteten slabs.c:POWER_BLOCK Wert Memcached neu kompilieren oder die ineffiziente malloc/free-Backend verwenden. Andere Vorschläge umfassen eine Datenbank, MogileFS, etc.