Vše závisí na tom, jak ji budete používat. Pokud se počítá každý bajt, například když musíte platit za každý kB přenesený do cloudové služby, můžete si spočítat náklady. Matematika je jednoduchá; byte je byte 'na drátě'. Uvnitř redis je pro větší hodnoty stejně jednoduché. Pro menší hodnoty provádí Redis určitou optimalizaci paměti.
Ve vašem HSET
například rozdělíte členy, což má smysl pouze v případě, že je většinu času potřebujete oddělit jeden od druhého. Lepší přístup -může- be:HSET user:data 987654321 '{"loc": "123456", "time": "2014-01-01T13:00:00"}'
. Samostatné klíče/členy 'stojí' mnohem více než delší struny, z hlediska výkonu. Můžete dokonce vložit celou tabulku nebo datovou sadu do jednoho člena, pokud bude použit pouze jako jedna úplná semistatická entita.
Rychlost a velikost:Mezi klávesami je výrazný rozdíl a hodnoty .
Klíče: Kratší je obecně efektivnější z hlediska paměti i rychlosti. Pokud používáte redis Sorted Set, můžete dokonce použít 'čísla' jako klíče (tříděná sada 'členové' plus 'skóre'). Říkám „čísla“, protože skóre je technicky float64, ale aby mohlo být použito jako ID, musí být mezi -999999999999999 a 999999999999999 včetně (to je 15 číslic), bez jakékoli zlomkové části. To může být opravdu užitečné, protože Redis provádí rychlé a škálovatelné řazení O(log(n)) za běhu tříděných sad (pomocí skiplistů, zjednodušeno).
Hodnoty: Formát MsgPack (nekomprimovaný) zabírá nejméně místa, zvláště pokud ukládáte definice jednou a hodnoty mnoho. JSON je o něco méně paměťově efektivní, ale je samozřejmě tak běžný formát IPC, že by neměl být opomenut. Nezpracované řetězce, oddělené znaky, pevná délka (fuj), ať už si přejete cokoliv, je možné použít. Před uložením do Redis můžete svá data vždy zkomprimovat. Dosud účinnost paměti . Pokud jde o rychlost , je to méně jednoduché. Pokud chcete používat skriptování na straně serveru Lua (což byste měli), nemůžete s komprimovanými daty nic dělat. JSON a MsgPack lze deserializovat, ale pouze „jako celek“. Což je ve většině scénářů v pořádku. Nejflexibilnější je ukládání samostatných hodnot (například jako členové HSET), ale to má také svou cenu (většinou:příliš vysoká cena). To vše můžete také kombinovat. Nejčastěji používáme:předponu dvou nebo tří hodnot oddělených oddělovači, po nichž následuje užitečné zatížení MsgPack.
Moje obecná rada zní:začněte používat pouze HSET a ZSET, nerozdělujte data, která k sobě patří, používejte pro své klíče popisné PascalCased názvy mezi 10-25 znaky, pokud potřebujete oddělovače v klíčích (jmenné prostory), použijte ':'. , serializujte jako JSON (pro jednoduchost, ale kód pro snadné přepnutí na MsgPack), použijte skriptování Lua (i když Lua neznáte, podmnožina, kterou používáte v Redis, je malá).
Ve spouštěcí fázi vašeho projektu bych se tím příliš netrápil, vždy to můžete později změnit a udělat nějaká A/B srovnání, jakmile budete mít nějaká interpolovatelná data.
Doufám, že to pomůže, TW