ORM性能:GreenDAO比ORMLite更快吗?

32

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

性能是考虑因素之一, greenDAO的特性页面说:

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

我认为ORMLite的配置文件生成步骤应该可以消除运行时反射的需要。

ORMLite的更改日志表明,greenDAO基准测试是在配置文件功能发布后进行的,但是greenDAO功能页面没有明确说明测试是否生成了静态配置文件。

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

自那时以来,ORMLite也进行了性能修复,例如:

4.40: 4/16/2012 (svn r2516)
* ANDROID: 在创建DAO时进行大型性能错误修复。 外部字段始终使用反射而不是表配置。

有人可以确认greenDAO和ORMLite之间是否仍然存在较大的性能差异吗? 谢谢!


我期望GreenDao更快,但我很好奇最新的实际数据。 - Gray
1
如果速度是您关心的问题,为什么还要使用ORM呢? - Alex Fu
@AlexFu 为什么使用ORM会降低速度?如果有的话,开发人员可能会通过ContentProvider或CursorLoader编写不规范的代码,这并不会使事情更快。 - IgorGanapolsky
1
@IgorGanapolsky ORM通常会因为增加了抽象层而增加开销。直接查询数据库并直接使用数据将更快。速度提升多少?可能不会太多,但仍然存在。此外,如果您正在开发Android应用程序,一定要知道如何正确地查询ContentProvider或数据库... - Alex Fu
1个回答

65

我们刚刚发布了一个Github项目,用于比较ORMLite和GreenDao与原始SQLite的性能:

https://github.com/daj/android-orm-benchmark

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

主要结果如下:

GreenDao比ORMLite快得多。它大约是:

  • 在写入大量对象时,速度快3倍。
  • 在阅读单个表中的所有10000条目时,速度快50%。
  • 在单行索引读取方面速度为2-3倍(虽然两者都非常快)。
  • 在10000条目表中进行LIKE搜索时,速度快15倍。

该项目包含一个简单的原始SQLite基准测试和一个优化的SQLite基准测试

GreenDao与未优化的原始SQLite

  • GreenDao的写入基准测试速度快2倍。
  • GreenDao的读取基准测试速度慢25%。

GreenDao与优化的原始SQLite

  • GreenDao的读写基准测试速度慢50%。

详细结果请参见上面的Github存储库。

当然,在选择GreenDao而不是ORMLite之前,请确保进行自己的研究。

免责声明:如果您发现任何问题,请fork、修复并提交pull request! :-)


1
还有其他库的基准比较,例如SugarOrm吗? - android developer
4
没有,但是请随意fork这个项目并添加一个 :-) - Dan J
4
我进行了一些基准测试。是与读者的1对多关联使其变慢。如果去掉这种关联,阅读速度约为2倍,尽管我需要更多地实践来确认。我必须查看ormlite对该关联执行的操作,但它被设置为eager=true,这意味着它为每行数据获取所有相关数据。Green dao测试和SQL测试没有这样做,因此这不是一个公平的比较。完全透明地说,值得一提的是,我做了Android上原始ormlite移植的大部分工作,但没有在核心部分,所以我需要进行一些挖掘。 - Kevin Galligan
2
尝试进行编辑,但时间不够了。我做了一些微调,最后的测试显示ormlite的读写速度比green慢了50%。50%是相当显著的,但远远没有green时间的1200%。我在这里fork了基准测试:https://github.com/touchlab/android-orm-benchmark我将进行更多的测试,并且还在开发一个针对ormlite的预编译查询工具。它是一个很好的包,但有一些可以改进的地方。即使eager设置为false,查询也很慢。这种情况需要改进。 - Kevin Galligan
1
我无法理解GreenDao如何比原始SQL更快,因为它是基于原始SQL构建的。也许原始SQL存在糟糕的优化。 - Roman Nazarevych
显示剩余7条评论

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