読み込み(検索)処理の方が圧倒的に多いと予想されるようなKVS的なプロセスを、Erlang/OTPでどうやって効率的に(スケールアップするように)実装するか。 少し前にlocalという、名前のスコープを限定可能なプロセス名管理用ライブラリを実装した時に採用した方法のメモ。 結論 結論を先に書いてしまうと名前付きのETSを使うのが良い。 ETSを名前付き(and access=protected)にしておくことで、テーブルの所有プロセスを経由せずに読み込み処理を行うことが可能となる。 そのため、複数クライアントプロセスから同時に要求が来た場合でも、それらが(メッセージパッシングを通して)直列化されることなく、並列的に処理されることが期待できる。 実際に、今回測定した範囲では、ETSを使うことで読み込み処理はコア数に対してほぼ線形にスケールしていた。 実装例と性能比較 以降は、実際にETSを使