【问题标题】:Choosing an ORM for Android project (min. API level 7) [closed]为 Android 项目选择 ORM(最低 API 级别 7)[关闭]
【发布时间】:2012-07-13 14:10:01
【问题描述】:

我目前有一个应用程序,它的主要性能问题是使用由 JSON 响应组成的基于文件的数据库。

我想重写我的应用程序以使用 SQLite 数据库功能。
由于我很懒,所以我想使用某种 ORM。

到目前为止,我只找到了两个大的 ORM 库:

我的主要目标是尽可能提高处理数据的性能

但我发现这些库存在两个可能的问题。

  • ORMLite 使用 注解,这是由于this bug 造成的pre-honeycomb 中的大性能问题

  • GreenDAO 正在使用某种代码生成器,这会减慢我的开发速度,因为我必须编写生成器,然后使用生成的代码。而且我不太喜欢这个主意。

  • DB4O 是 JPA,我一直认为它速度慢而且内存使用量大,因此不适合低端设备(记住 Android API v7)


广告@ChenKinnrot
估计的负载应该足以考虑使用 ORM。
在我的情况下,它是大约 25-30 个唯一表,以及至少 10 个表连接(一次 2-4 个表)。大约 300-500 个唯一字段(列)


所以我的问题是:

  1. 我应该在 Android 应用程序中使用 ORM/JPA 层吗?
  2. 如果是,你会推荐我使用哪个库?(也请添加一些参数)

【问题讨论】:

  • 我们在谈论多少张桌子?你的数据有多大?
  • 仅作记录,ORMLite 还支持针对您的类型的表配置,以解决注释性能问题。
  • @Gray 很高兴听到这个消息,如果您有兴趣,请随时发布带有示例和基准的答案,因为您是正确的人,应该拥有这些数据。

标签: java android database sqlite orm


【解决方案1】:

我使用过 ORMLite,一旦你掌握了它的窍门(几个小时),我发现它很简单,非常强大并且不会导致任何性能问题(在 Gingerbread 中对 HTC 欲望和 HTC Hero 测试的应用程序)。

我将在任何需要使用数据库的项目中再次使用它。

【讨论】:

  • 我喜欢它,但是由于 JPA 不完全受支持,值得一提的是,您将不得不使用 ormlite 的注释系统而不是 JPA。
  • 是否还有其他库的基准比较,例如 SugarOrm ?
【解决方案2】:

ORM 层很有吸引力。

但是,在实践中,我要么编写简单的 ORM我自己,要么使用 Content Provider 范式,这与 ORM 配合得不好。

我查看了一些现有的 ORM 库(主要是 ORMLite,activeAnroid),但它们都把我吓跑了 因为他们似乎并不容易上手。

“我们谈论的是 25-30 个唯一表,以及至少 10 个表连接。 大约 300-500 个唯一字段(列)"

如果您对数据的查询方式有固定且有限的模式,我建议您自己编写 ORM/sql。

我的 2 美分。

【讨论】:

    【解决方案3】:

    如果您担心应用程序的性能,我建议您使用 greenDAO。它将使您免于编写大量无聊的代码,因此代码生成应该不是问题。作为回报,它还会为您生成实体和数据库单元测试。

    【讨论】:

      【解决方案4】:

      我有一些知识可以分享: ORM 的定义比你自己写 sql 慢,它假设是为了简化数据访问的编码,并提供一个通用的解决方案,generic = 运行速度比你编写查询要慢,如果你对 sql 很了解的话。

      真正的问题是你想要获得多好的性能,如果它是最好的,不要考虑任何数据映射框架,只有 sql 生成框架可以帮助你更快地编写东西,但让你完全控制一切。

      如果你不想充分利用sql db,请使用orm,我对你提到的这个orm没有经验,所以我不能说选择什么。

      而且您的数据库并没有那么大和复杂,所以使用 orm 节省的时间不是问题。

      【讨论】:

        【解决方案5】:

        根据我的经验,使用 ORM 引擎给我带来了很多好处。但是,有时我不得不处理性能问题。

        我必须从数据库中加载大约 10 000 行,并且使用标准实现(我使用的是 ORMLite),大约需要 1 分钟才能完成(取决于设备 CPU)。

        当你需要从数据库中读取大量数据时,你可以执行纯 SQL 并自己解析结果(在我的例子中,我只需要从表中查询 3 列)。 ORMLite 还允许您检索原始结果。至此,性能提升了 10 倍。所有 10 000 行都在 5 秒或更短的时间内加载完毕!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多