web-dev-qa-db-ja.com

モバイル開発向けのレルムとSQLite

Xamarin開発者で、以前はモバイルデータベースとしてSqliteを使用していましたが、
最近Realmが登場しました。
パフォーマンスと使いやすさなどの違いについての考えはありますか?

どちらを使用するのがベストプラクティスですか?

23
Medo Medo

RealmとSqliteは、多くの面でまったく異なります。

主な違いを把握するために通過できる2つの記事を次に示します。

システムプロパティの比較レルムとSQLite
CoreData/SQLiteよりもレルムを選択する5つの理由

Slaviaのコメントで示唆されているように、Realmを含むいくつかのORMの比較については、 この記事 もご覧ください。

22
Mohammed Ali

私はRealmのXamarinチームの開発者なので、Xamarin製品がどのように機能するかについてもう少しお話しできます。

レルムには、すべての製品に共通のC++コアがあります。だからこそ、言語ごとではなくplatformごとにリリースするのです。ネイティブコアを含める必要があります。コードのPCLビルドをサポートしていますが、PCLライブラリはありません-ビルド時に、PCLコードは一致するIOSまたは= Androidライブラリ。

すべてのRealm製品は、特定のプログラミング言語に慣用的なインターフェイスを提供するために個別に開発されており、コードとデータの間に可能な限りスリムなレイヤーがあります。

つまり、たとえば、C#製品はクエリ用のLINQを提供し、データモデルを定義する手段としてC#オブジェクトを使用します。ビルド時に、Fodyコードジェネレーターを実行してプロパティセッターとゲッターを追加し、C#オブジェクトがコアC++データと直接やり取りするようにします。典型的なORM製品とは異なり、データベースからバッファにデータをコピーしてからオブジェクトにコピーすることはありません。

レルムデータはメモリマップされるため、コードからストレージに直接移動します。自動プロパティのゲッターとセッターを置き換えるアクセサーメソッドを生成します。

これを説明するためにzero-copyという用語を使用します。対照的に、他のほとんどのシステムには、プロパティをサポートするフィールドを持つC#オブジェクトがあります。これらのオブジェクトは、多くの場合、diskストレージから読み取られたSQLiteバッファーからコピーすることによって取り込まれます。それはコピーの2つのレベルです。

22
Andy Dent