質問

だから私はETSを使用しています - うまく機能します。ただし、ルートデータのキャッシュとして使用します。モジュールがロードされたときにロードし、変更が行われたときに保存します(書かれたものよりもはるかに読み取られます)。

私は、Detsが物事をよりきれいにするだろうと思っていました - 私はテーブルの持続性を管理することを心配する必要はありません。これはDETSの良い使用でしょうか? (サイズは問題ではなく、読み取りパフォーマンスの大幅な増加を主に懸念しています。すべてのデータがメモリに簡単に収まることができます)。

役に立ちましたか?

解決

DETSはほとんどの場合ETSよりもはるかに遅くなりますが、データサイズが小さい場合は、ディスクキャッシュによってキャッシュされ、2回目の読み取りを取得するのが速くなると思います。使用して試してみてください

しかし、ETSの代わりにMnesiaを直接使用することを検討しましたか? MnesiaテーブルタイプDISC_COPIESを使用すると、ETSの速度と粘り強さが得られます

他のヒント

からまっすぐ Man PageをDetss:

「DETSによって実行されるすべての操作はディスク操作であるため、単一のルックアップ操作には一連のディスクシークおよび読み取り操作が含まれることを認識することが重要です。このため、DETS機能は対応するETS関数よりもはるかに遅くなりますが、 Detsは同様のインターフェイスをエクスポートします。」

つまり、読みやすいストレージの場合、Detsは最適な選択ではありません。

(この設計上の決定は奇妙だと思う必要があります - より良い実装は最近の検索をキャッシュする必要があります。しかし、そのETSとDETはErlangの基本施設であるため、実装者はユーザーにその最適化を残したと思います。)

めったに書くことは、あなたがメモリに保管していても大丈夫な多くのデータを読んで、「モキグロバル」をチェックしてください。 Mochiwebには、コード管理システムを介してモジュール定数のErlangの共有ヒープを乱用するきちんとしたモジュールがあり、その場で定数として指定された値を持つモジュールを生成することにより、用語への超高速アクセスを提供します。

リアックは、リング状態のIIRCにモキグロバルを使用しています。

彼女のソース:

https://github.com/mochi/mochiweb/blob/master/src/mochiglobal.erl

もちろん、ここにはまったく持続性はありませんが、読み取りを大幅に最適化しようとしている場合は、これ以上良くなることはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top