Maximale Größe des Objekts, das in Memcached mit memcache.py gespeichert werden kann

StackOverflow https://stackoverflow.com/questions/1440722

  •  10-07-2019
  •  | 
  •  

Frage

Ich brauche eine ziemlich große Datei (11MB) an den Benutzer zurück. Aus bestimmten Gründen kann ich nicht bieten nur eine direkte URL auf die Datei ( http: //www.sample. com / mybigfile.exe ); sondern muss über Code zugegriffen werden.

Statt sie von der Platte über lesen zu müssen und immer wieder, dachte ich es in Memcached Speichern (wenn dies keine gute Idee ist, lassen Sie mich wissen). Alles scheint, fein (keine Fehler) zu arbeiten, aber wenn ich versuche, die Datei von Memcached abrufen ich immer keine bekommen, als wenn die Datei nicht zwischengespeichert wurde.

Gibt es eine Größenbeschränkung, was gespeichert werden?

Hier ist der Code:

def download_demo():
    """
    Returns the demo file
    """
    KEY = "xyz"
    TIME = 86400 #24 hours

    buff = memc.get(KEY)
    if not buff: 
        file = open(FILENAME, 'r')
        buff = file.read()
        memc.set(KEY, buff, TIME)

    print "Content-Type:application/x-download\nContent-Disposition:attachment;filename=%s\nContent-Length:%s\n\n%s" %    (os.path.split(FILENAME)[-1], len(buff), buff)
War es hilfreich?

Lösung

Es gibt zwei Einträge über die in der memcached FAQ :

Die Antwort auf die erste ist (zitiert, Hervorhebung von mir) :

  

Die maximale Größe eines Wertes können Sie   Speicher in Memcached ist 1 MB . Wenn   Ihre Daten größer ist, betrachten   client Kompression oder Aufspaltung   der Wert in mehrere Tasten.

Also ich Ihre 11MB Datei bin zu raten ist recht zu groß in einem Memcached Eintrag zu passen.

Die Erhöhung der Größe eines Objekts ist möglich, wie pro andere Antworten.

Andere Tipps

Ab memcache 1.4.2 ist dies ein vom Benutzer konfigurierbare Parameter: ReleaseNotes142 * memcached @ Github

  

Konfigurierbare maximale Objektgröße

     

Viele Menschen haben für Memcached zu können, bittet um Gegenstände lagern größer   als 1MB, dass man , während es in der Regel nicht empfohlen wird dies tut, ist es   nun auf der Kommandozeile unterstützt.

     

Ein paar aufgeklärtes Volk hat auch gefragt, für Memcached das reduzieren   maximale Objektgröße. Das ist auch eine Option.

     

Die neuen -I Parameter können Sie die maximale Objektgröße festzulegen, in   Laufzeit. Es unterstützt eine Einheit postfix für natürliche Ausdruck zu ermöglichen, von   Objektgröße.

     

Beispiele:

memcached -I 128k # Refuse items larger than 128k. 
memcached -I 10m  # Allow objects up to 10MB

die notwendigen Schritte Fassen wir zusammen:

1) aktualisiert Memcache auf Version 1.4.2 oder höher.

2) Fügen Sie die Flagge -I 15M (oder wie viele Megabytes) an Ihren memcache Fahrbefehl.

Das ist entweder Befehlszeile oder in Ubuntu, fügen Sie die Zeile

-I 15M

, um überall in /etc/memcached.conf und starten Sie den Dienst.

3) Fügen Sie die erforderlichen Flag an den Client in memcache.

import memcache
memc = memcache.Client(['localhost'], server_max_value_length=1024*1024*15)
memc.set(KEY, buff, TIME)

Wenn Sie keinen direkten Zugriff auf den memcache Client kann (das heißt durch einen Rahmen arbeiten), dann hacken nur den memcache Code direkt.

Auf Ubuntu, es ist /usr/local/lib/python2.7/dist-packages/memcache.py. Ändern Sie die Zeile:

SERVER_MAX_ITEM_LENGTH = 1024 * 1024 

SERVER_MAX_ITEM_LENGTH = 1024 * 1024 * 15

Natürlich müssen Sie diese wieder über tun, hackt, wenn Sie memcache aktualisieren, aber es ist eine sehr einfache und schnelle Lösung.

Die maximale Datengröße ist 1 MB pro Artikel

http://code.google.com / p / memcached / wiki / FAQ # What_is_the_maximum_data_size_you_can_store? _% 281_megabyte% 29

Update: Dies ist eine 2009 Antwort. Und in diesem Zeitpunkt waren die Informationen korrekt und die Quelle war offiziell. Jetzt im Jahr 2014 Memcached kann 128mb speichern statt 1MB (aber die Entwickler nicht die Mühe, die offizielle FAQ zu aktualisieren). Der einzige Hinweis könnte jemand id eine dunkele Seite finden, die wahrscheinlich tot in einem Jahr sein wird.

Nach Artikel erklärt, warum es maximale Größe einer einzelnen Datei auf 1 M begrenzen.

http://www.mikeperham.com / 2009/06/22 / Platten-Seiten-Brocken-und-memcached /

Basicly gibt es kleine Stücke von Speicherseiten in memcache, innerhalb dessen Objekte befinden.

Und die Standardseitengröße scheint 1M zu sein, so dass der max Objekt eine Seite enthalten kann, ist begrenzt auf 1 M.

Auch wenn Sie können es Config um die Größe zu erhöhen, aber ich denke, das könnte eine Art von Performance-Trade-off hat.

Wenn Sie Python verwenden Memcached-Client, bitte auch sicherstellen, dass zusammen mit dem Memcached-Server die Grenze in Client memcache.py Datei zu erhöhen.

~ / anaconda / lib / python2.7 / site-packages / memcache.py

SERVER_MAX_KEY_LENGTH = 250 
SERVER_MAX_VALUE_LENGTH = 1024 * 1024 * 15

Sie in Memcached Konsole (telnet localhost 11211) sehen

  

Statistiken Brammen       STAT 48: chunk_size 3677344

Niemand scheint diesen Teil der Frage zu beantworten:

  

Statt sie von der Platte über und über zu müssen, lesen, dachte ich an es in Memcached Speichern (wenn dies keine gute Idee ist, lassen Sie mich wissen).

Dies ist keine gute Idee. Alle modernen Dateisysteme haben eine effiziente Caching-Mechanismen. Lesen einer Datei von der Festplatte, die gelesen wurde einige Sekunden früher in der Regel noch im Speicher-Cache sein. Dies ist viel schneller als über ein Netzwerk Memcached erreichbar.

Wenn Sie auf 127.0.0.1 Memcached ausführen, wird der Speicher behauptet wird nur für diese einzelne Datei verwendet werden, wereas, wenn Sie einfach auf das Caching des Betriebssystems verlassen kann der Speicher für verschiedene Zwecke verwendet werden, je nach Jobs auf der Hand.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top