移动开发中的 Realm vs SQLite 选择

25

我是一名Xamarin开发者,过去常使用Sqlite作为移动数据库,
最近Realm也出现了。
你知道它们在性能和易用性方面有什么区别吗?

使用这两个库的最佳实践是什么?


这是我看到的最新(西班牙语)比较,经过独立测试和发布,使用Google翻译非常易读,具有基准测试。 - Andy Dent
1
一个例子(易用性):Realm仍不支持on delete cascade。 - Murat Ozgul
1个回答

24
我是Realm Xamarin团队的开发人员,所以我可以向您介绍一下Xamarin产品的工作原理。
Realm有一个C++核心,适用于所有产品。这就是为什么我们为每个平台发布而不仅仅是一种语言 - 我们需要包括本地核心。虽然我们支持PCL代码的构建,但我们没有类似于“PCL库”的东西 - 在构建时,您的PCL代码将链接到匹配的IOS或Android库。
所有Realm产品都是单独开发的,以提供一个特定编程语言的语言习惯接口,并在您的代码和数据之间提供尽可能薄的层次。
这意味着,例如,C#产品提供LINQ查询并使用C#对象来定义数据模型。在构建时,运行Fody代码生成器以添加属性setter和getter,因此您的C#对象将直接与核心C++数据交互。与典型的ORM产品不同,没有将数据从数据库复制到缓冲区,再从缓冲区复制到您的对象中。
Realm数据是内存映射的,因此它直接从您的代码到存储器。我们生成访问器方法来替换自动属性的getter和setter。
我们使用术语"零拷贝"来描述这一点。相比之下,大多数其他系统都将具有支持其属性的字段的C#对象。这些对象通常是通过从已从磁盘存储读取的SQLite缓冲区进行复制而填充的。那就是两个级别的复制。

2
与典型的ORM产品不同,没有将数据从数据库复制到缓冲区,然后再复制到您的对象中。您能帮我解释一下这个声明吗? - Amrut Bidri
1
看一下目前开放的错误数量 https://github.com/realm/realm-dotnet/issues?page=2&q=is%3Aissue+is%3Aopen 大约有30个左右的错误。我不会说Realm已经准备好用于生产环境。 - Don Box
@AndyDent,希望你能就此问题提供反馈意见:https://mobilefirstcloudfirst.net/2016/05/xamarin-apps-sqlite-vs-realm-whats-the-best-mobile-db-solution/。尽管这篇文章是一年前发布的,但作者是Xamarin大学认证讲师。 - BiLaL
@AndyDent 感谢您的全面快速回复。如果您正在将其用于自己的项目中,这意味着您更喜欢它而不是SQLite。在四月份,当您在那里时,有关Fody的任何计划都在讨论中吗? - BiLaL
@BiLaL 关于 Fody,我不能透露任何未公开的信息。在问题线程 https://github.com/realm/realm-dotnet/issues/529 中提到了使用 Roslyn。 - Andy Dent
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接