次の要件があります。
- 将来のロードのためにユーザーのリストをディスク上に保持します。各ユーザーには、おそらく3つまたは4つのプロパティがあります。通常、数十から数百のユーザーがサポートされ、数千のユーザーがサポートされる必要があります(10,000を超えるユーザーのサポートは必要ありません)。
- 将来のロードのためにレコードのリストをディスクに保持します。各レコードには、おそらく1ダースほどのプロパティがあります。通常、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)があるため、可能であれば、これらをメモリではなくディスクに保存することが望ましいです。
- アプリケーションが独自のサンドボックスに配置されているため、デバイスへのアクセスが制限されているため、本格的なデータベースのインストールは不可能です。サンドボックス内にはディスクアクセスがあります。
- この情報にアクセスする必要があるアプリケーションは1つだけであり、アクセスを同期できます。つまり、スレッドセーフ/同時アクセスは必ずしも要件ではありません。
私が開発しているものと同様のアプリケーションがありますが、ユーザー名に独自のテキスト形式(ハッシュ区切りなど)を使用し、レコードにObjectOutputStreamを使用する別のデバイス用です。
現在の実装に見られる欠点:
- ファイル全体が全体として読み取りまたは書き込みされます。つまり、ファイルを頻繁に読み取るか、データのメモリ内コピーを保持して、変更された場合にのみディスクに書き戻す必要があります。現在のアプリケーションのように後者の選択を行う場合、データのサイズに基づいてメモリ使用量が無期限に増加する可能性があることを意味します。
- 現在の形式はどちらも独自仕様であり、前者はデータが不良になる傾向があり(ユーザー名にハッシュが含まれているとどうなりますか?)、後者は人間が読める形式ではありません(または一般的に利用可能なツールで照会できません)。
これは、 derbyやsqliteなどの単純なファイルベースの組み込みデータベースが理想的な場合のようです。ただし、これまでの私の調査から、ほとんどのオプションには、使用できないJDBCドライバーが含まれているようです(java.sql。*はこのデバイスに実装されていません)。
誰かがぴったりの既存のプロジェクトを知っていますか?