hash over array

久しぶりにテック記事。

最近Firebaseのデータ構造を勉強していたら次のような記事を見つけた。

Firebaseではarrayをhashとして保存している。例えば

// we send this
['a', 'b', 'c', 'd', 'e']
// Firebase stores this
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}こ

こんな感じで裏ではhashに変換されてる。これにはちゃんと理由があって非同期的にソートをしたり書き込みをすると順序ベースで作られたデータ構造が正常に動かない。atomicな操作とは別にデータの一貫性を保つ操作が必要になる。

arrayとhashは可換な場合が多いからデータ構造として単純なarrayを使いたくなるが最近私はデータ構造にarrayを含めないようにしている。

プログラミングをはじめてarrayの強力さに気づいていたけど今になってデータ構造はなるべくarrayを避けた方がいい気がしている。ただしnumpyでarrayを使わないとかあり得ない。

arrayとhashの保存・処理は別にすべきとも思う。arrayはGPUなどのローカルでのマルチプロセスを前提とした時のみ使用する。つまりarrayをデータベースに保存して改変するような操作は排除する。ネットワークを通じて(もしくはクラス間のデータの受け渡し)においては極力hashを用いる。

🐈❤️