ESENTのススメ
MICROSOFT MVP FOR VISUAL BASICだったこともある
石坂忠広
http://opcdiary.net
1
みなさん
JETデータベースは
お好きですよね。
2
MDBファイルとは
オトモダチですよね?
3
ADO/ADO.NETで
JET OLE DB Driver
ですよね?
4
しかし!
5
近年困ったことが
6
諸君らの愛してくれた
JET OLE DB Driver(4.0)は死んだ、
何故だ!
7
32bitだからさ
8
Windows Server 2012以降
MDACで配布される32bitの
ODBC/OLE DBドライバの使用が
推奨されなくなり、
将来なくなる可能性が大!
その中にJET(MDB)のドライバも!!
9
どうするよ?
10
アプリケーション組み込み型DBの
選択肢
 MDBにこだわる
 64bit版Office インストールを条件にMicrosoft.ACE.OLEDBを使用する。
 Officeの付属コンポーネントなので、Office ProもしくはAccessのインストールが
必須。だがこれでもMDBは過去互換性のために使えるといった程度と割り切る
 MDBは捨てる
 SQLite
 OSS/PDSであることが問題にならければ、一番の推奨
 SQL Server Compact Edition
 開発終了、終了、終了、終了・・・・・・なのでもう使っちゃダメ
 ESE(Extensible Storage Engine)
11
ESENT(Extensible Storage Engine)
 Windows 2000以降Windowsに標準搭載されたISAM(Indexed and
Sequential Access Method)エンジン
 マルチユーザー、マルチインスタンスに対応
 Jet Blueと呼ばれたり。
 JETデータベースのフォーマット
 高い可用性
 トランザクションログと、そこからのロールバック
 高いパフォーマンス
 安心の実績
 Active Directoryのデータベースとして使用
 Exchange Serverのデータベースとして使用
12
MDB(JET Red)との違い
 ESENTはWindowsの標準API
 JET REDはODBCドライバ、OLE DBドライバ(MDACで配布)
 MDACは64bit版がなくWindows Server 2012以降非推奨
 ESENTは大容量対応(16TB)
 JET REDは4GBの壁
 ESENTはマルチユーザー、マルチインスタンス対応
 JET Redはできない事はないが難しい
 トランザクションログがなくロールバックが構造的に出来ない
 よく壊れる
13
Database
 2,4,8,16,32kBのページサイズ、このうち16,32kBはWindows 7,
Exchange 2010以降
 1データベース1ファイル
 1ファイルの最大サイズはページサイズ×232、16kBであれば、16TB
14
Table, Record, Columns
 レコードの集合
 レコードはカラムの集合
 カラムにデータが格納される
 テーブルに対して、クラスタインデックス、非クラスタインデックスが付
けられる。インデックスの形式はB+Trees
15
ESENTのテーブルで使用できる
データ型
 数値
 Unsinged Byte, Short, Unsigned Short, Long, Unsigned Long, LongLong
 IEEE Single, IEEE Double
 Currency
 Bit
 日付
 DateTime(8byte)
 文字
 Text(<=255Byte), Long Text(<2GB)
 バイナリ
 Binary(<+256Byte), Long Binary(<2GB)
 Guid
16
ESENT Managed Interface
 ESEのAPIを.NETのコードから使用するためのInterop Rapperと
Dictionaryを拡張を拡張したより使いやすいライブラリ
 Microsoft.Isam.Esent.Interop
 ESENT APIにアクセスするためのライブラリ
 基本的にWin32APIのESENT APIと同じ構成
 PersistentDictionary
 Dictionary(Tkey, Tvalue)を拡張して、Dictionaryの内容をESEに保存する
17
Microsoft.Isam.Esent.Interop
 ESENTのドキュメント参照
 http://msdn.microsoft.com/en-us/library/dn375980(v=exchg.10).aspx
 パフォーマンス
18
Insert records 132,000 records/second
Update one record 157,000 updates/second
Read one record 1,149,000 retrieves/second
Scan all records (sequential) 794,000 records/second
Seek to all records (random order) 266,000 seeks/second
出典: ESE Managed Interface@CodePlex
Demo 19
PersistentDictionary
 ESENTを使用する際の手順を大幅に簡略化
 使用感覚は普通のDictionary
 可用性
 使用中にプロセスがクラッシュしても、データベースが自動的にトランザク
ションログからデータを復旧
 並列性
 複数スレッドからのアクセスに対応
 スケール
 1カラム最大2GBまでのデータ、最大16TBのデータベースサイズ
20
PersistentDictionary
 パフォーマンス
21
Sequential inserts 32,000 entries/second
Random inserts 17,000 entries/second
Random Updates 36,000 entries/second
Random lookups (database cached
in memory)
137,000 entries/second
Linq queries (range of records) 14,000 queries/second
出典: ESE Managed Interface@CodePlex
PersistentDictionary
 制約
 使用できる型に制約がある
 Keyとして使用できるデータ型
 Boolean, Byte, Int16, UInt16,Int32, UInt32, Int64, Float, Double, Guid,
DateTime, TimeSpan, String
 Valueとして使用できるデータ型
 Key値として使用できるデータ型とUri、IPAddress
 それらを使用した構造体、ただしSerializable属性が必要
 配列は使用できない(構造体内も同様)
 許可されている物以外の参照型変数
22
Demo 23
資料
 WEB
 ESENT Managed Interface(Code Plex)
 Extensible Storage Engine – Wikipedia
 Microsoft Jet Database Engine – Wikipedia
 Extensible Storage Engine Managed Reference – MSDN
 ManagedEsent – Nuget
 本日のDemo
 https://github.com/ishisaka/VbEsentSample
24

Esentのススメ