21

Windows デスクトップ アプリケーションに何らかの埋め込みキー値 (またはドキュメント) ストアを使用/実装することを考えています。さまざまな種類のデータ (GPS トラックはその一例です) を保存し、もちろんこのデータを照会できるようにしたいと考えています。データの量は、すべてを同時にメモリにロードできないほどの量になります。

y-serialのようなキー値ストアのストレージ エンジンとして sqlite を使用することを考えていますが、.NET で記述されています。また、 FriendFeed が MySQL を使用してスキーマのないデータを保存する方法についても読みました。これは、非リレーショナル データに RDBMS を使用する方法を示す良い指針です。sqlite は、そのシンプルさ、移植性、およびライブラリ サイズから、適切なオプションのようです。

私の質問は、組み込みの非リレーショナル ストアに他のオプションがあるかどうかです。配布可能である必要はなく、トランザクションをサポートする必要もありませんが、.NET からアクセスできる必要があり、ダウンロード サイズが小さい必要があります。

更新: sqlite と組み込みのキー値ストア ライブラリである Berkeley DB を比較する、キー値データベースとしての SQLiteというタイトルの記事を見つけました。

4

8 に答える 8

19

Windows には組み込みの非リレーショナル ストアがあります。これは ESENT と呼ばれ、Active Directory や Windows デスクトップ サーチなど、いくつかの Windows アプリケーションで使用されます。

http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx

.NET アクセスが必要な場合は、CodePlex で ManagedEsent レイヤーを使用できます。

http://managedesent.codeplex.com/

そのプロジェクトには、IDictionary インターフェイスを実装するキー値ストアを実装する PersistentDictionary クラスがありますが、データベースによって支えられています。

于 2010-02-23T00:59:02.373 に答える
10

RavenDBを見てください。埋め込み可能で、スキーマレスで、.NET で動作するかのように見えます。

ウェブサイトから:

  • スケーラブルなインフラストラクチャ: Raven は、実績のあるスケーラブルな既存のインフラストラクチャの上に構築されます。
  • シンプルな Windows 構成: Raven は、セットアップが簡単で、サービスまたは IIS7 Web サイトとして Windows で実行できます。
  • トランザクション: Raven は、ACID トランザクションを使用した System.Transaction をサポートします。そこにデータを入れると、そのデータはそこにとどまります
  • Map/Reduce: Linq クエリでマップ/リデュース インデックスを簡単に定義
  • .NET クライアント API: Raven には、Unit of Work などを実装する完全に機能する .NET クライアント API が付属しています。
  • RESTful: Raven は RESTful API を中心に構築されています
于 2010-05-30T06:29:27.077 に答える
5

個人的には、NHibernate (および Fluent NHibernate) を使用した SQLite を使用します。NHibernate はクラスのデータベース スキーマを自動的に生成できるため、保持するクラスを指定するだけで済みます。Fluent NHibernate を使用すると、これは非常に簡単です。さらに、特定のオブジェクトを検索でき、すべてのデータをメモリにロードする必要はありません。

于 2010-01-17T15:20:07.670 に答える
2

これは古い質問ですが、誰かがつまずいた場合に備えて回答を追加すると思いました。私の会社は、Nxdb と呼ばれる .NET プラットフォーム用のオープン ソースの組み込み XML データベースをリリースしました。これは Apache 2.0 ライセンスの下にあり、数年間社内で開発および使用されています。これは基本的に、クロスコンパイルされた (IKVM を使用した) バージョンの BaseX (素晴らしい Java XML データベース) へのバインディングであり、組み込みのユースケースと .NET 環境のための追加機能を備えています。プロジェクトページはこちら: https://dracorp.assembla.com/spaces/nxdb

XML は、格納しようとしているコンテンツがテキストにシリアライズ可能である限り、複雑な階層ツリーを格納できるため、このタイプのデータ ストアに適しています。実際、データベースに直接アクセスすれば、「XML」に触れることさえありません。また、強力で完全なクエリ言語である XQuery を使用してクエリを実行することもできます。

于 2012-03-13T16:35:29.473 に答える
2

2 つの列を持つ単純な sqlite データベースを作成できますか。

==documents==
id|data

データはjsonデータになります。

次のようなキー テーブルを作成することもできます。

==keys==
keyname|keyvalue|id

すばやく検索できるように、キー名とキー値でインデックスが作成されます。

1 つの db ファイルをコレクションにすることも、複数のコレクションに対して複数の db ファイルを作成することもできます。

フォルダーを「dbs」として使用して、mongodb の db->collection->document の階層に一致させることができます

于 2010-04-01T23:59:41.900 に答える
2

KISS の原則を問題に適用するには、ファイルを使用することをお勧めします。

ファイル名のようにキーです。ファイルの内容が値です。Windows フォルダがインデックスです。

シンプルで、迅速で、効率的で、柔軟で、誰にでもできる (愚か者の知性が低い場合)。

于 2010-02-23T02:45:59.390 に答える
1

y_serial について言及していただきありがとうございます...より正確には、これは Python モジュールです。

SQLite を使用したウェアハウス Python オブジェクト

「シリアライゼーション + 永続化 :: 数行のコードで、Python オブジェクトを圧縮して SQLite に注釈を付けます。その後、SQL を使用せずに、キーワードによって時系列でそれらを取得します。データベースがスキーマのないデータを格納するための最も有用な「標準」モジュール。」

http://yserial.sourceforge.net

私の経験では、SQLite はほとんどのプロジェクトで (PostgresQL や Berkeley DB を含む) ほとんどのデータベースよりも高速で信頼性の高い選択肢です。もちろん、サーバー デーモンは必要ありません。

yserial は非常に簡単に実装できます (「ファイル名がキー / ファイルの内容が値」というアプローチよりもはるかに高速です ;-)

于 2010-03-03T17:11:53.857 に答える