JDBCを必要としないJavaが埋め込まれたDB
-
02-10-2019 - |
質問
次の要件があります。
- 将来の読み込みのために、ディスク上のユーザーのリストを保持します。各ユーザーには3つまたは4つのプロパティがあります。数十から数百人のユーザーが典型的であり、数千人のユーザーをサポートする必要があります(10,000以上のサポートは必要ありません)。
- 将来の読み込みのためにディスク上のレコードのリストを保持します。各レコードには、おそらく十数個のプロパティがあります。通常、0〜10のレコードがありますが、低い数千のレコードの数をサポートする必要があります(たとえば、ネットワークがダウンしているため、レコードが一定期間処理されていない場合)。
ユーザーは通常、バッチとして記述され、定期的に検索されて特定のプロパティを持つものを見つけます(たとえば、提供されたパスワードを介してユーザーを認証するため)。
レコードは断続的に記述され、断続的に読み取られます(後者は、レコードを削除する前にそれらを処理および送信する周期的なタスクによって)。
私は次の制限に直面しています:
- これは、Java 1.1.8/1.2.xのサブセットのみをサポートする埋め込みデバイスです。付属のパッケージは次のとおりです。
- Java.lang
- java.io
- Java.util
- java.net
- Java.lang.Reflect
- java.util.zip
- java.math
- java.text
- Java.security
- デバイスには、デバイスに応じてかなり控えめなリソース(たとえば、〜20 MB RAM)があり、実現可能な場合はメモリではなくディスクに保存することが望ましいです。
- アプリケーションが独自のサンドボックスに配置されているため、デバイスへのアクセスが制限されており、本格的なデータベースインストールが実行可能になります。サンドボックス内にディスクアクセスがあります。
- この情報へのアクセスが必要な単一のアプリケーションのみが同期することができます。つまり、スレッドセーフティ/コンカレントアクセスは必ずしも要件ではありません。
私が開発しているものと同様のアプリケーションがありますが、ユーザー名に独自のテキスト形式を使用している別のデバイス(Hash Delimitedなど)とレコードにはObjectOutputStreamを使用しています。
現在の実装に表示される欠点:
- ファイル全体が全体として読み取られるか、書かれています。つまり、ファイルを頻繁に読み取る必要があるか、データのメモリ内コピーを保持し、変更したときにディスクに書き戻す必要があります。現在のアプリケーションとして後者の選択を行う場合、それはメモリの使用がデータのサイズに基づいて無期限に成長することを意味します。
- 両方の現在の形式は独自のものであり、前者は悪いデータを起こしやすい傾向があり(ユーザー名にハッシュが含まれている場合はどうなりますか?)、後者は人間の読み取り可能ではありません(または一般的に利用可能なツールでクエリ可能)。
これは、単純なファイルベースの組み込みデータベースが理想的な場合のようです。 ダービー また sqlite. 。ただし、これまでの私の調査からは、ほとんどのオプションにはJDBCドライバーが含まれているように見えますが、これは利用できません(java.sql。*はこのデバイスに実装されていません)。
誰もが既存のプロジェクトに適していることを知っていますか?
解決
あなたは見ているかもしれません JDBM これは、Pure Javaの非常にシンプルなキー価値ストアです。他の属性を検索する必要がある場合は、リバースインデックス用の追加のテーブルを作成する必要がある場合があります。
比較的古いので、Pre-Java2プラットフォームをサポートする可能性があります。
他のヒント
やってみました DB4O?組み込みオブジェクトデータベースです。 Java 1.1で実行され、JDBCは必要ありません。
所属していません StackOverflow