私はWWWフレームワークでAPI呼び出しをたくさんキャッシュしてバッファリングしています。既に作成されたAPI呼び出しを検出するだけでなく、キャッシュファイル名と一致させるために、「フィンガープリンティング」データを使用します。配列を指紋採取する最速の方法(データの配列からユニークなハッシュを計算する)
多くのデータがGET、POSTなどのように配列に移動されます。その結果、API呼び出しの一意性はデータに依存します。
この結果、私はこの情報を指紋採取する必要があります。これを行うには、データ配列から「指紋」を生成し、それを保存して比較できる文字列にハッシングする必要があります。
配列のシリアル化には、PHPでserialize()とjson_encode()があります。さまざまなベンチマークの後、私はjson_encode()を配列をシリアライズするためのより速いメソッドと見なし、それにとても満足しています。
ハッシュには、md5()とsha1()関数があり、そのうちのmd5()はベンチマークによって高速です。
だから私の現在の指紋アルゴリズムは次のとおりです。
$fingerprint=md5(json_encode($array));
しかし、私は、これはPHPの配列をフィンガープリントのための「最速」メソッドであるかどうか疑問を持っています。私はGoogleとStackOverflowを試してみましたが、良い選択肢は見つかりませんでした。私は正しい道を歩いているのですか、私は別の何かをする必要がありますか?
md5(var_export($ data、true))はどのように比較されますか?また、 'json_encode'によって保存される順序に頼ることができるかどうか疑問です。キーの順序が異なるため、キャッシュを逃すのは悪いことです。 – Hamish
var_export()はserialize()より高速ですが、私のテストではjson_encode()よりも遅いです。私はmd5()を置き換えるcrc32()を探しています、テストする必要があります。 – kingmaple
まあ、明らかに(私の驚きに)crc32()は実際にはmd5()よりも遅く、もちろん衝突の可能性がより高くなります。だから私は以前md5(json_encode($ array))にあったところに戻ります。 – kingmaple