2010-12-14 5 views
1

現在、Windows Phone 7上のローカルストレージ用の実用的なデータベースソリューションは何ですか?検索を使用して、私はこれらの2つのスレッドを見つけましたが、数ヶ月以上前です。私はWP7のためのデータベースにいくつかの新しい開発があるのだろうかと思っていました。また、以下のリンクに記載されているデータベースについてのレビューは見つかりませんでした。現在Windows Phone 7の実行可能なローカルデータベースとは何ですか?

私の要件は次のとおりです。

  • それは保存
  • 商用利用は無料であるべき/レコードを更新するだけで、実際のレコードを保存してはいけませんデータベース全体(WinPhone7 DBと違って)
  • LINQを使用して〜1000レコードのテーブルで高速クエリを実行できます。
シミュレータで動作するはず

EDIT:
は単なるテストアプリを使用してスターリングを試してみました:それはよさそうだが、私は2つの問題を持っています。

  1. 1000レコードの作成には、db.Save(myPerson)を使用すると30秒かかります。 Personは5つのプロパティを持つシンプルなクラスです。
    その後、私はdb.SaveAsync<Person>(IList)メソッドがあることを発見しました。これは、現在のスレッドをもうブロックしないため、問題ありません。
    BUT私の質問は:db.Flush()をすぐに呼び出して保存して、現在保存しているIListのクエリを実行しますか? (同期モードでレコードを保存するのに30秒かかるため)。または、BackgroundWorkerが保存を完了するまで待つ必要がありますか?

  2. これらの1000レコードをLINQとwhere句で照会すると、最初にメモリにロードするのに14秒かかることがあります。
    これをスピードアップする方法はありますか?ここで

いくつかのベンチマーク結果は以下のとおりです。あなたは、スターリングを見てしたい場合があります(ユニットテストは、HTCトロフィー上で実行された)

 
----------------------------- 
purging: 7,59 sec 
creating 1000 records: 0,006 sec 
saving 1000 records: 32,374 sec 
flushing 1000 records: 0,07 sec 
----------------------------- 
//async 
creating 1000 records: 0,04 sec 
saving 1000 records: 0,004 sec 
flushing 1000 records: 0 sec 
----------------------------- 
//get all keys 
persons list count = 1000 (0,007) 
----------------------------- 
//get all persons with a where clause 
persons list with query count = 26 (14,241) 
----------------------------- 
//update 1 property of 1 record + save 
persons list with query count = 26 (0,003s) 
db saved (0,072s) 
+1

私は議論/主観的であることの前提にある2人の近い票があります参照してください。 「最高のものは何か」を「実行可能なもの」という言葉に変えることは、この問題に取り組むべきです。 –

+0

ok thx、thats fine with me – Buju

+0

ところで、あなたは最新バージョンをダウンロードするべきです。隔離されたストレージプロバイダに問題がありましたが、今はるかに高速です。 –

答えて

5

- それは非常にあなたの懸念のほとんどに対応している必要がありますフレキシブル。

http://sterling.codeplex.com/

(フル開示:私のプロジェクト)

+0

+1スターリングは、初期の時から周りにされているとジェレミーはそれをサポートしてアクティブにされています。 –

+0

thx。私はそれを試してみましょう。 – Buju

+0

私はスターリングを試したところ、2つの問題が見つかりました。元の投稿を更新しました。 – Buju

0

Perstは非商用利用は無料です。

+0

sry、商業用には無料です。 – Buju

1

try Siaqodbは、商用プロジェクトであり、Sterlingとの違いとして、オブジェクトをシリアル化せず、query.Siaqodbをメモリ内に保持することはできません。LINQプロバイダは、メモリ内にオブジェクトを作成せずに、要求されたオブジェクトのみをロード/構築することができます。

0

また、Ninja Database Proを試してみることもできます。それはスターリングよりも多くの機能を持っているようです。

http://www.kellermansoftware.com/p-43-ninja-database-pro.aspx

+0

私はスターリングが実際に行っているいくつかの機能をサポートしていないことを示しているので、比較チャートを修正するための電子メールを送信しました。彼らは単に比較からスターリングを削除したように見えます。スターリングには欠かせない主なもの:一括削除とカスケード削除、ゼロ設定/自動テーブル、Silverlight以外のサポート。しかし、Ninjaは、基礎となるオブジェクト全体を逆シリアル化することなく、LINQを使用して高速なクエリと索引付けを行うためのキーとインデックスをサポートしているとは思いません。 –

+0

Jeremy、実際にインデックスに対してLINQをサポートしています。インデックスに一致するオブジェクトのみがデシリアライズされます。 //名前に基づいて人物のリストを取得します。 var gregQuery = db.CreateIndexQuery ( "Name"、 "Greg"); foreach(gregQueryのvar person) { \t Console.WriteLine(person.PersonId); } –

関連する問題