ORM 性能:greenDAO 比 ORMLite 快吗?

Posted

技术标签:

【中文标题】ORM 性能:greenDAO 比 ORMLite 快吗?【英文标题】:ORM performance: is greenDAO faster than ORMLite? 【发布时间】:2013-12-03 11:30:05 【问题描述】:

我一直在我的应用程序中使用 ORMLite,我正在考虑是否迁移到 greenDAO。

性能是该决定的重要组成部分,greenDAO's Features page 说:

对于相同的给定实体,greenDAO 插入和更新实体 速度提高 2 倍,实体加载速度提高 4.5 倍 实体比 ORMLite。 ... (数字和图表于 2011 年 10 月 23 日更新)

我认为ORMLite's config file generation 步骤应该消除运行时反射的需要。

ORMLite changlog 表明 greenDAO 基准测试是在配置文件功能发布后完成的,但 greenDAO 功能页面没有明确说明是否为测试生成了静态配置文件。

4.26: 9/26/2011 (svn r1978) * android:添加了字段配置实用程序以避免使用注释来创建 Dao 性能问题。

从那时起也有 ORMLite 性能修复,例如

4.40:2012 年 4 月 16 日 (svn r2516) * ANDROID:修复创建 DAO 时的大性能错误。外部字段总是使用反射而不是表配置。

谁能确认greenDAO和ORMLite之间是否还有很大的性能差异?谢谢!

【问题讨论】:

我预计 GreenDao 会更快,但我对最新的真实数据感到好奇。 如果您关心速度,为什么还要使用 ORM? @AlexFu 为什么使用 ORM 会降低速度?如果有的话,开发人员可能会通过 ContentProvider 或 CursorLoader 编写草率的代码,这不会让事情变得更快。 @IgorGanapolsky ORM 由于增加了抽象层,往往会增加开销。直接查询数据库并直接使用该数据会更快。多少?可能不多,但仍然。另外,如果你在 Android 上开发,你肯定知道如何正确查询 ContentProvider 或数据库... 【参考方案1】:

我们刚刚发布了一个 Github 项目,用于比较 ORMLite 和 GreenDao 与原始 SQLite 的性能:https://github.com/daj/android-orm-benchmark

该项目还允许您比较内存数据库与磁盘数据库的性能。

标题结果是:

GreenDao 比 ORMLite 快很多。大致是:

写入大量对象的速度提高了 3 倍。 读取单个表中的所有 10000 个条目的速度提高了 50%。 单行的索引读取速度提高了 2 到 3 倍(尽管两者都非常快)。 在 10000 个条目表中对 100 条记录进行 LIKE 搜索时快 15 倍。

该项目包含一个简单的原始 SQLite 基准测试和一个optimized SQLite benchmark。

GreenDao 与 优化的原始 SQLite

GreenDao 的写入基准速度提高了 2 倍。 GreenDao 的读取基准速度慢 25%。

GreenDao 与优化的原始 SQLite

GreenDao 在读写基准测试中的速度降低了 50%。

有关详细结果,请参阅上面的 Github 存储库。

当然,我们的基准测试代码中可能存在错误...如果您发现任何错误,请分叉、修复并提交拉取请求! :-)

免责声明:在选择 GreenDao 而不是 ORMLite 之前,请务必进行自己的研究。

【讨论】:

是否还有其他库的基准比较,例如 SugarOrm ? 不,但请随意分叉项目并添加一个 :-) 我用基准运行了一些测试。它与读者的 1-Many 关联使这变得缓慢。当您剥离它时,阅读量大约是 2 倍,尽管我需要更多地使用它来确认。我必须看看 ormlite 对关联做了什么,但它设置为 eager=true,这意味着它会抓取每一行的所有数据。 green dao 测试和 sql 测试没有这样做,所以它不是一个公平的比较。完全披露,为了它的价值,我为安卓做了很大一部分原始的 ormlite 端口。不过,核心中什么都没有,所以我需要进行一些挖掘。 尝试编辑但时间已用完。我做了一些调整,最后一次测试显示在 ormlite 上的读写速度比绿色慢 50%。 50% 很重要,但它远不及 1200% 的绿灯时间。我在这里分叉了基准:github.com/touchlab/android-orm-benchmark 我要做更多的测试,而且我还在为 ormlite 开发一个预编译的查询工具。它是一个很好的包,但有一些可以改进的地方。即使将 eager 设置为 false,查询也很慢。那种东西。 我无法理解 GreenDao 在原始 SQL 的基础上如何比原始 SQL 更快。也许在原始 sql 中有床优化。

以上是关于ORM 性能:greenDAO 比 ORMLite 快吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite

Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite

Android开发中大家都在使用啥orm框架

Android ORM 框架之 greenDAO应用基础

Android ORM 框架之 greenDAO应用基础

GreenDao数据库框架