iOS 数据库比较:SQLite vs. Core Data vs. Realm 已翻译 100%

oschina 投递于 2016/02/20 09:56 (共 6 段, 翻译完成于 03-01)
阅读 9783
收藏 62
3
加载中

如果你想开发一个能够快速运行并没有Bug的伟大应用,你就必须得仔细的考虑一下你的应用的各个方面。有这么一个你必须解决的方面是怎样存储和查询大数据,那么你就很可能会使用到数据库。在大多数情况下,IOS 数据库都会选择SQLite和Core Data,还有一个相对较新的数据库Realm。

这篇文章讲述了每种选择的优缺点,并讨论了如果你已经使用了SQLite 或 Core Data,那么怎么转换到Realm的过程。

我是菜鸟我骄傲
翻译于 2016/02/21 20:32
2

SQLite

SQLite是在世界上使用的最多的数据库引擎,并且还是开源的。它实现了无配置,无服务要求的事务数据库引擎。SQLite可以在Mac OS-X, iOS, Android, Linux, 和 Windows上使用.

由于它是使用ANSI-C开发的,因此它提供了一个简单的,方便使用的编程接口。SQLite也是一个小的,轻量级的,可以被存储在跨平台磁盘文件的完善的数据库。

SQLite之所以这么流行的原因是:

  • 独立于服务器

  • 零配置

  • 多进程和线程下安全访问。

  • 在表中使用含有特殊数据类型的一列或多列存储数据。

我是菜鸟我骄傲
翻译于 2016/02/21 21:10
1

Core Data

Core Data 是App开发者可以使用的第二大主要的IOS存储技术。你需要根据数据类型和数据量进行管理和存储,SQLite和Core Data都有它们各自的优缺点。Core Data 更加关注于对象而不是传统的表数据库方法。使用Core Data,你可以存储一个Objective-C类的对象。

尽管它们从本质上不相同,但是Core data::

  • 比SQLite使用更多的内存。

  • 比SQLite使用更多的存储空间。

  • 比SQLite在取数据方面更快。

我是菜鸟我骄傲
翻译于 2016/02/21 21:22
1

Realm 

Realm 是个新技术。Realm天生比前面提到的数据库解决方案更快,更高效。新的解决方案就叫做Realm,它是一个跨平台的移动数据库。它可以在Objective-C 和Swift中使用,并且它是专门为 iOS 和 Android设计的数据库。

Realm最主要的优势是:

  •  绝对免费

  •  快速,简单的使用

  • 没有使用限制

  • 为了速度和性能,运行在自己的持久化引擎上。

我是菜鸟我骄傲
翻译于 2016/02/21 21:33
1

Realm 的最大亮点是仅仅用一两行代码就能解决所有问题。Realm易于安装,并且运行速度比SQLite 和 Core Data都快。而且数据库文件即可以在IOS上使用,也可以在Android上使用。

如果你的App的数据量很大,并且用户的使用量也很大,那么你就得在起步时就特别注意可测量性这一方面。Realm就是这方面最好的选择,并它可以让你快速的处理大量数据。

要想使用Realm,只需要iOS 8 或 OS X 10.9以上的系统就可以了。旧的系统还不支持这种新的直接了当的管理本地存储和数据库的解决方式。

我是菜鸟我骄傲
翻译于 2016/02/28 20:56
1

切换到Realm

如果你已经使用了Core Data,并且你想转换到Realm,过程很简单。很多开发者用了一两小时就完成了。注意Core Data 和 Realm 都是以对象的形式处理数据的,因此你只需要重构Core Data 代码,使用Realm就可以了。

Realm已经概括了切换的过程, 这里是我对它的总结:

  • 移除Core Data 框架。定位你代码中包含Core Data 代码的部分,然后重构。它们总结了一个很好的方法来帮助使用 Core Data的每一行代码抛出编译错误。

  • 移除Core Data 安装部分的代码。 你的应用里的某个地方一定有Core Data 安装代码的部分,你必须彻底的移除掉Core Data 。Realm在你第一次访问Realm对象的时候就会立马自动配置。你可以选择你想存储Realm数据文件的位置,但在运行时,你仍然可以选择。

  • 迁移你的模型文件 你可以可容易的转换管理对象的子类到Realm。Realm为了让类标头看起来更小些,在内部管理属性关键词(你不必自己指定它们)。你可以安全的去掉所有NSNumber的东西,因为Realm支持简单的数值类型(NSInteger和CGFloat)。但是Realm也有一些限制。不像Core Data的数据对象使用NSManagedObjectID来确定对象的唯一性,Realm把这个交给开发人员来管理。第二,当前版本的Realm还不能处理含有nil值的对象属性。这是一个小问题,但是在下一个版本里开发人员有望解决这个问题。

  • 迁移你的写操作。Realm的保存操作和Core Data 有一点不相同的地方,你得了解这个问题,一旦把Realm数据对象添加到Realm对象,就不能被修改了。这确保了数据在不同线程下的一致性。为了能够修改属性。这些被保存的对象必须在’写’的事务里。

  • 迁移你的查询, 让你的查询,在需要时可以检索到你的数据。在Core Data里,为了取一个文件,你需要写将近10行的代码。但是在Realm里仅仅需要一行就够了。

  • 迁移用户在Core Data里产生数据,你可以在应用里重新连接Core Data框架,然后用它去数据,传递给Realm。对于那些可替代的用户数据有一个简单的解决方案就是删除所有的Core Data 保存文件,下次应用启动的时候重新开始。

关键是要在使用最好的技术和工具的时候保持你设计的流程简单。一旦你花费时间在建立了你的行之有效的流程,就不要让“新的吸引力”带你走。让“新的”成为你的流程的一部分,然后让时间决定是否值得。

我是菜鸟我骄傲
翻译于 2016/02/28 22:29
0
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(17)

上天的程序员
上天的程序员
这就是广告.....
ReturnZ
ReturnZ
这篇这么水都翻译
subool
subool
sqlite还是最好用的,性能也不错,功能也够用,实在找不出什么缺点,安全性也很强。
南漂一卒
南漂一卒

引用来自“宿命”的评论

Realm 比较坑, coredata基于sqlite, 综上所述, sqlite完胜
Pader
Pader

引用来自“Timor-快跑”的评论

世界上使用的最多的数据库引擎

看到这句话 我就不想往下看了。。
你以为不是么?SQLite可以说是无处不在,可能你不知道。
Timor-快跑
Timor-快跑
世界上使用的最多的数据库引擎

看到这句话 我就不想往下看了。。
朱宏青
朱宏青
sqlite is very good.
似水流年灬
似水流年灬
2星期前把项目新分支里切换使用realm,结果发现了很多坑,然后就放弃了,还不成熟,继续用sqlite
hunibadger
hunibadger
sqlite is good.
lostTemple
lostTemple
我是来看评论的
返回顶部
顶部