NostrP2PでサーバがDBに保持している33個のイベントデータ(基本的にNostrのものと一緒。ただし長ったらしいhex文字列のたぐいはbyte配列で持っている)を読みだして、MessagePackの形式にシリアライズしてガッチャンコしたものをgzip圧縮したら、大体半分くらいのサイズになった。

allEvents size:33

allEventsBytes size:8195

compressedBytes size:4296

注: ほとんどが1アカウントのpostやらreactionのデータ、かつ、postの本文はせいぜい十文字程度、という条件での話なので、仮にまともに運用されたとした時に、最新の33イベントをとってきて同じ圧縮率が得られるということは多分無い

#nostrp2p

Reply to this note

Please Login to reply.

Discussion

NostrP2Pは10秒程度の間隔でクライアントがデータよこせといって、サーバはその期間に新しく届いたデータをバッチで渡す設計なので、半分とは言わないまでも、ある程度圧縮が効く可能性はありそう。

#nostrp2p

なお、I/FはRESTである。

同じことをJSONテキストにシリアライズした場合でやってみた。

(この時はgolangのライブラリ関数ではなく、7zipのgzip圧縮でやった。オプションは標準。圧縮の条件がバイナリの時と厳密には違う可能性あり)

圧縮前: 16561バイト

圧縮後: 4789バイト

雑に4分の一弱の圧縮率。

圧縮率がこちらの方が倍程度高い理由は、おそらく、鍵、ID、署名なんかのバイト配列をバイナリにエンコードすれば配列長そのままのサイズだが、文字列にすると1byteが1byteの文字2つの2byteに膨れるので、そこいらに圧縮が効いた、ということではないかと推測。

というか、バッチで圧縮かければ、バイナリだろうとJSONテキストだろうと同じぐらいのサイズになるんだなw

うーむ。

#nostrp2p