Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。4ダーティな操作クエリーリスト内包表記Mnesiaを探求する参考資料ダーティな操作より高速にデータにアクセスしなければならない場合のために、Mnesiaには、トランザクションのオーバーヘッドなしにテーブルを操作する「ダーティな」関数が用意されています。この関数を使用するとパフォーマンスが高まり、Mnesiaは一種のリアルタイムDBMSになります。トランザクションの原子性と独立性は著しく損なわれます。サンプルのtest.erlファイルには、以下の関数が記述されています。10000にしてtest:mop(Counter)を実行し、この関数をfirst@charlieノードとsecond@deltaノードで十分な時間動作させます。この関数は両ノードで実行され、一貫性の問題を生じることなく終了しました。同時にthird@nemoでtest:select()を実行すると、3レコードから成るリストが常に返されます。これは、opもreverse_opも1回でmnesia:writeとmnesia:deleteを適用するからです。同じtestのダーティバージョンであるtest:dirty_mop(Counter)を両ノード上で同時に実行すると、多数のエラーメッセージが発生します。third@nemoでtest:select()を実行すると、2レコードまたは4レコードから成るリストが返される場合もあります。Comprehensionモジュール(qlc)を使用することで、Erlangをデータベース言語として使用し、データベースに問い合わせることができます。qlcモジュールは、リスト内包表記という強力なErlang構文を利用します。数学的集合を定義したい場合は、集合ビルダーの表記法を用います。これは、集合の要素の特性を記述することによって、集合の要素を限定するものです。今度は、この表記法とErlangのリスト内包表記構文がどれくらい似ているかを見てみましょう。Aは、10より小さく、かつ2乗しても自身と同じ数になる自然数(N)の集合を表しています。これを数式で表すと次のようになります。Erlangでは、lists:seq(0,9)という関数呼び出しで10未満のすべての整数のリストを返すことができるので、以下の構文を使用して上述の要素のリストを取得できます。X].[0,1]2つの式の類似性は顕著です。リスト内包表記は、リストからリストを作成するツールと考えることもできます。以下に一般的な構文を示します。Expressionは、Qualifier1などの修飾子によって生成およびフィルタされた要素に対して行う一連の演算です。...]Mnesiaデータベースに問い合わせるためのインターフェースをqlcがどのように提供しているか理解できたでしょう。このモジュールを使用する前に、システムのどこにファイル「qlc.hrl」があるかを探し、コードに以下の行を含める必要があります。).私のtest.erlでは、関数test:select()はtable1の全レコードからなるリストを返します。mnesia:table(table1)])関数qlc:qに渡している引数がリスト内包表記であることに気付くでしょう。このリスト内包表記では、テーブルの内容を返す関数mnesia:tableをジェネレータとしています。関数qlc:qが返したクエリーハンドルは関数qlc:eで評価され、この関数によってすべてのテーブルデータが収集され、リストとして返されます。qlc:e(Handle).先に説明した理由から、これらすべての関数がmnesia:transactionの内部で動作することに注意してください。関数test:join()には、テーブルtable1とtable2を結合する簡単な例が含まれています。この部分のクエリーリスト内包表記は次のようになります。Y#table2.table2_id])実際のところ、レコードとは、命令(先頭文字がマイナス記号の記述)で宣言された名前付きフィールドから成るタプルです。レコード内のフィールドにアクセスするには、ドット構文を使用します。X#table1.numberは、指定されたフィールドnumberの値を返します。Xはtable1のレコードとして評価されます。Mnesiaを探求するMnesiaの重要な機能をいくつか紹介してきましたが、もちろんこれですべてではありません。これまで学習してきたことが読者の好奇心を呼び起こし、Mnesiaについてもっと知りたいと思っていただければ幸いです。Mnesiaの可能性を最大限に引き出すため、ぜひ他の機能もより深く知ってもらいたいと思います。1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。Giorgetti)イタリアに拠点を置くITマネージャ、テクニカルライター。ビジネス分野と工業分野でオープンソースの開発に従事。モブプログラミングを取り入れて開発を効率化させるヒント9企業の7割超が「2025年の崖」を理解していないことが明らかに。モブプログラミングを取り入れて開発を効率化させるヒント9企業の7割超が「2025年の崖」を理解していないことが明らかに。モブプログラミングを取り入れて開発を効率化させるヒント9企業の7割超が「2025年の崖」を理解していないことが明らかに。5.0」がリリース新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。