分散キャッシュのためのMnesiaの増加をサポートしている「のErlang / OTP並行プログラミングの戦闘」の章IX

  1. Mnesiaは、RAMに記憶されたデータで特に良好な、データ・ブロックを格納するのに適した軽量ソフトリアルタイム分散データ記憶システム、冗長な複製およびトランザクション、離散アーランです。
  2. 低冗長小さいサイズのデータ​​ストレージ要件のためにMnesia。適度なサイズ(ディスクベース)永続的なデータ、またはクロスプロセスの共有が必要のためのランタイム・データは、Mnesiaは良い選択です。
  3. データベースを確立するステップ:
    1. 初期Mnesia
    2. スタートノード
    3. データベーススキーマの確立
    4. Mnesiaを開始
    5. データベーステーブルの構築
    6. データの新しいテーブルエントリ
    7. いくつかの基本的なクエリデータを行うには
  4. データベースを初期化します。
    1. 開始ノード:
      erl -mnesia dir '"/tmp/mnesia_store"' -name mynode

       

    2. データベーススキーマの確立:
      いわゆるデータベーススキーマは、どのようなテーブルは、データベーステーブルが及び方法の詳細を記録し、いくつかの記述情報、です。
      複数のノードに分散データベースを構築するには、ノードは、自身の格納されたデータの一般的な構造を理解することができるように、すべてのノード上のパターンのコピーを堆積させる必要があります。
      mnesia:create_schema([node()]).    % 在本地节点建立空数据库模式

      これが失敗した場合は、現在のノードがリスト内のノードとの通信を確立することはできませんので、それはノードの操作でMnesiaを持っている、または(あなたがmnesiaを呼び出すことができますどのノード上の古いデータベーススキーマに残りの上に可能性があることも:delete_schema(ノード)古いモデルをクリーンアップします)。

    3. Mnesiaを開始

      mnesia:start().
      mnesia:info().    % 查看数据库信息
    4. 内蔵のテーブル:
      mnesia:create_table(Name, Options).
      
      -record(user, {id, name}).
      mnesia:create_table(user, [{attributes, record_info(fields, user)}, {type, bag}]).
      
      mnesia:write(#user{id=Id, name=Name}).
      mnasia:read(user, Id).
      mnesia:transaction(Fun).
      mnesia:dirty_write(#user{id=Id, name=Name}).
      
      
      %% record_info/2 不是真正意义上的函数,它只在编译器有效(和记录语法中的#一样),在运行期或在 Erlang shell 中无法调用它。
      
      其他的默认选项:
      1、表既可读也可写
      2、表仅驻留于 RAM 中
      3、表中存储的记录与表同名
      4、表的类型为 set
      5、加载优先级为0
      6、local_content 标记被置为 false
      
      Mnesia 表类型:
      1、set
      2、ordered_set
      3、bag
      
      Mnesia 存储类型:
      1、ram_copies
      2、disc_copies
      3、disc_only_copies    % 不支持ordered_set
      
      不同节点上的表可以有不同的存储类型,甚至支持运行时修改。

      オプションは、オプションの{名前、値}のリストであり、すべてのオプションの中で、最も重要なのはオプションはテーブルに格納されたレコードのフィールド名を指定するために使用される属性、です。
      そうでない場合は、Mnesiaは2つだけ、それぞれ、記録フィールド、およびキーvalを前提としています。
      表の主キーは常にレコードの最初のフィールドです。

  5. クエリ:

    mnesia:select(user, [{#user{id='$1', name=zh}, [], ['$1']}]).
    
    {Head, Condition, Results}
    Condition 罗列作用于该匹配条件上的额外约束条件
    Result 描述要从匹配到的每条记录中生成什么样的结果项式
    
    '_'    仅限于在 Head 部分使用,无所谓,任意值都可以
    '$_'   仅限于在 Result 和 Condition 中使用,与查询条件相匹配的整条记录
    '$$'   仅限于在 Result 和 Condition 中使用,等价于依此罗列出在 Head 部分匹配的所有变量

     

  6. クエリリスト速度構造(QLC):
    -include_lib("stdlib/include/qlc.hrl").
    
    Table = mnesia:table(user),
    QueryHandle = qlc:q([U#user.id || U <- Table, U#user.name =:= zh]),
    qlc:eval(QueryHandle).

    QLCは、テーブルETSテーブル、テーブルなどMnesiaを備えたあらゆる種類のものに適用される一般的なクエリインターフェイス、です。

发布了42 篇原创文章 · 获赞 2 · 访问量 1万+

おすすめ

転載: blog.csdn.net/sanmao123456_/article/details/103489083