用于移动开发的 Realm vs Sqlite [关闭]

Posted

技术标签:

【中文标题】用于移动开发的 Realm vs Sqlite [关闭]【英文标题】:Realm vs Sqlite for mobile development [closed] 【发布时间】:2016-09-06 04:51:06 【问题描述】:

我是一名 Xamarin 开发人员,我曾经使用 Sqlite 作为移动数据库, 最近 Realm 出现了。 关于它们之间差异的任何想法 性能和易用性……等等?

使用任何一种的最佳做法是什么?

【问题讨论】:

geeks.ms/jsuarez/2016/06/28/… 最新(西班牙)比较我看到独立测试和发布,谷歌翻译可读性很强,有基准。 一个例子(易用性):Realm 仍然不支持删除级联 【参考方案1】:

Realm 和 Sqlite 在很多方面都有很大的不同。

您可以阅读以下两篇文章来了解主要区别:

System Properties Comparison Realm vs. SQLite 5 Reasons Why You Should Choose Realm Over CoreData/SQLite

根据 Slavia 在 cmets 中的建议,还可以查看 this article 以比较几个 ORM,包括 Realm。

【讨论】:

kpgalligan.tumblr.com/post/133281929963/my-talk-at-droidcon-uk 清醒地看待很多 ORM,包括 Realm。 将 Realm 置于 SQLite 之上的“易用性”论点可能会受到以下库的挑战:github.com/jmbarnardgh/labqlite 和模型类生成器:github.com/jmbarnardgh/labqlite_model_generator;此处示例:github.com/jmbarnardgh/labqlite_objc_demo @JacobBarnard 不幸的是,仅适用于 ios。 Realm(以及 xamarin,就此而言)的好处之一是它们在很大程度上是跨平台的。【参考方案2】:

我是 Realm 的 Xamarin 团队的一名开发人员,因此我可以向您详细介绍 Xamarin 产品的工作原理。

Realm 有一个在所有产品中通用的 C++ 核心。这就是为什么我们为每个平台发布而不仅仅是一种语言 - 我们需要包含本机核心。虽然我们支持您的代码的 PCL 构建,但我们没有这样的 PCL 库 - 在构建时您的 PCL 代码将链接到匹配的 IOS 或 android 库。

所有 Realm 产品都是单独开发的,为给定的编程语言提供惯用的接口,在代码和数据之间有尽可能薄的层。

这意味着,例如,C# 产品提供了用于查询的 LINQ,并使用 C# 对象作为定义数据模型的方法。在构建时,运行 Fody 代码生成器以添加属性设置器和获取器,因此您的 C# 对象将直接与核心 C++ 数据交互。与典型的 ORM 产品不同,不会将数据从数据库复制到缓冲区,然后再复制到对象中。

领域数据是内存映射的,因此它直接从您的代码传输到存储。我们生成替换自动属性 ​​getter 和 setter 的访问器方法。

我们使用术语零拷贝来描述这一点。相比之下,大多数其他系统将具有 C# 对象,这些对象具有支持其属性的字段。这些对象通常是通过从 disk 存储中读取的 SQLite 缓冲区复制来填充的。这是两个级别的复制。

【讨论】:

Unlike typical ORM products, there's no copying of data from the database into buffers and then again into your objects你能帮我解释一下这个声明吗? 我也在一些博客上读过类似零拷贝数据库的内容。和这里有关系吗? 是的,“零拷贝”这个词是用来描述我在说什么的。 查看打开的错误数量 github.com/realm/realm-dotnet/… 大约 30 个错误,目前我不会说 Realm 已准备好投入生产 我相信 Apache Kafka 也使用零拷贝来实现糟糕的快速性能承诺。

以上是关于用于移动开发的 Realm vs Sqlite [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

移动端专用数据库Realm介绍

Keycloak Realm VS Keycloak 客户端

RealmWCDB与SQLite移动数据库性能对比测试

nodejs集成sqlite

Realm数据库的简单介绍和使用

在Android加入和使用Realm