2011-06-17 21 views
2

キャッシングレイヤー(redis)に大きなJSON値を追加していますが、圧縮を使用してメモリ使用量を少し減らすことができると思います。node.jsの圧縮

node.jsの圧縮モジュールはどちらを使用していますか?何らかの理由で、joyent/node Modules wikiに掲載されているものは、404秒、1年以上コミットしていない、見ている人が非常に少ない、メモリリークの報告を受けているようです。

Snappyはすばらしく見えますが、私はむしろより移植性のあるものに行くつもりです。

私は当然、非同期圧縮/圧縮解除APIをブロッキングより優先しますが、低圧縮レベルで大きな違いがあると思うのであれば、私は興味があります。

ご返信いただきありがとうございます!


EDIT:ポータビリティについて

:私が本当に意味するnpmを経由してモジュールをインストールすることができるということであると一般的な* NIXのセットアップ上に存在していない外部の依存関係を持っていません。 なぜですか?特定のPaaS設定(現時点でherokuの青磁セダー私の知る限りではあるが、将来的にはより多くの場合)は、sshなどを介して従来の管理者アクセスをインスタンス環境に提供しないため、依存関係を持たせる唯一の方法はvia npm

理想的には、モジュールはcygwinでも実行する必要があります。

だから何を使用しますか?

+2

[bison](https://github.com/BonsaiDen/BiSON.js)を使用してください。 – Raynos

+0

全く同じことをしようとしています。あなたが最終決定したことに興味があります。 – AlexGad

答えて

2

「もっと移植性がある」と言えば、私はあなたがスナッピーでC++コードを参照していると仮定します。残念なことに、ほとんどの圧縮アルゴリズムのネイティブJavaScript実装はネイティブのC/C++実装よりも1桁遅いので、ほとんどすべてのノード圧縮ライブラリがそれを使用しています。スナッピーは非常に移植性があり(私はSolaris、Linux、OSX上に構築しました)、かなり活発です。私は他の何ものにも強く勧めています。

+0

更新:数日前、ノードスナッピーモジュールの作成者は、npmにsnappy-libのソースを含めました。これは、単純な 'npm install snappy 'が全ての依存関係をもたらすことを意味します。 – Hristo

1

圧縮オーバーヘッドを追加する前に試行できる最適化があります。 documentation on memory optimizationを参照してください。

+0

私たちはすでにジップマップなどのようなものを使用しています。私は、zipmapがシリアル化されたハッシュの表現を圧縮するかどうか、あるいはメモリ内でシリアル化されていない状態に保つオーバーヘッドを避けるかどうか疑問に思います。新しい質問をするか、単純なベンチマークを実行するのがベストだと思います。 – Hristo

+0

しかし、キャッシングレイヤーに入れる前に圧縮することに関連するもう1つのことがあります。前述の[ここ](http://meta.stackexchange.com/questions/69164/does-stackoverflow-use-caching-and-if-so-how)のように、より大きい文字列値をキャッシュに送る前に圧縮すると、ネットワークスループット – Hristo