- Mnesiaは、RAMに記憶されたデータで特に良好な、データ・ブロックを格納するのに適した軽量ソフトリアルタイム分散データ記憶システム、冗長な複製およびトランザクション、離散アーランです。
- 低冗長小さいサイズのデータストレージ要件のためにMnesia。適度なサイズ(ディスクベース)永続的なデータ、またはクロスプロセスの共有が必要のためのランタイム・データは、Mnesiaは良い選択です。
- データベースを確立するステップ:
- 初期Mnesia
- スタートノード
- データベーススキーマの確立
- Mnesiaを開始
- データベーステーブルの構築
- データの新しいテーブルエントリ
- いくつかの基本的なクエリデータを行うには
- データベースを初期化します。
- 開始ノード:
erl -mnesia dir '"/tmp/mnesia_store"' -name mynode
- データベーススキーマの確立:
いわゆるデータベーススキーマは、どのようなテーブルは、データベーステーブルが及び方法の詳細を記録し、いくつかの記述情報、です。
複数のノードに分散データベースを構築するには、ノードは、自身の格納されたデータの一般的な構造を理解することができるように、すべてのノード上のパターンのコピーを堆積させる必要があります。mnesia:create_schema([node()]). % 在本地节点建立空数据库模式
これが失敗した場合は、現在のノードがリスト内のノードとの通信を確立することはできませんので、それはノードの操作でMnesiaを持っている、または(あなたがmnesiaを呼び出すことができますどのノード上の古いデータベーススキーマに残りの上に可能性があることも:delete_schema(ノード)古いモデルをクリーンアップします)。
-
Mnesiaを開始
mnesia:start(). mnesia:info(). % 查看数据库信息
- 内蔵のテーブル:
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を前提としています。
表の主キーは常にレコードの最初のフィールドです。
- 開始ノード:
-
クエリ:
mnesia:select(user, [{#user{id='$1', name=zh}, [], ['$1']}]). {Head, Condition, Results} Condition 罗列作用于该匹配条件上的额外约束条件 Result 描述要从匹配到的每条记录中生成什么样的结果项式 '_' 仅限于在 Head 部分使用,无所谓,任意值都可以 '$_' 仅限于在 Result 和 Condition 中使用,与查询条件相匹配的整条记录 '$$' 仅限于在 Result 和 Condition 中使用,等价于依此罗列出在 Head 部分匹配的所有变量
- クエリリスト速度構造(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を備えたあらゆる種類のものに適用される一般的なクエリインターフェイス、です。
分散キャッシュのためのMnesiaの増加をサポートしている「のErlang / OTP並行プログラミングの戦闘」の章IX
おすすめ
転載: blog.csdn.net/sanmao123456_/article/details/103489083
ランキング