【发布时间】:2011-05-18 06:08:42
【问题描述】:
我目前正在开发一个基于 Android 的项目。在不涉及许多细节的情况下,该软件将在定制的设备上运行。硬件永远不会改变,永远都是一样的。这绝对是一个加分项:)
话虽如此,该项目要求我们在设备上存储负载和数据负载 - 在某些表中超过 3m 行。 SQLite 对我们来说很好地处理了这么多行的扫描,当我们开始进行复杂的连接以带回我们需要的所有相关数据时,问题就出现了。我们已经考虑过对数据库进行非规范化,但担心这会将数据库推到可用范围之外。
我们正在研究使用面向对象的数据库,例如 db4o 或 NeoDatis。我们希望通过存储对象,我们可以摆脱行级别的关系并将它们存储在对象上(就像 OOP 一样)。问题是我们无法找到这些 ODB 在 Android 上运行和使用的任何与性能相关的基准(至少不是最近的)。
是否有人对 Android 上的 OODB 和/或存储和访问如此大量的数据有任何经验?如果是这样,您可以提供任何建议将不胜感激。
-- 编辑
这是我们面临的问题的一个示例。它与我们的应用程序无关(我的 NDA 说我不能发布任何具体内容)但这个例子很好地代表了这个问题。
假设我们正在构建一个应用程序来监控在任何给定时间在新泽西收费公路上行驶的每辆车。对于任何给定的汽车,我们需要跟踪汽车的品牌和型号、车内有多少人以及车内人员的人口统计数据。所以基本上你最终得到的数据看起来像 -
汽车
标识 | 颜色 | make_id | in_toll_lane | model_id
制作
标识 | 名字
型号
标识 | 姓名 | make_id
汽车人
标识 | 年龄 | 性别 | is_driver | car_id
收费车道
标识 | car_in_line | 理想的汽车线 | 理想的住户
这些数据会经常变化。它也将变得相当庞大,因为毫无疑问,在任何特定时间都有很多人沿着 NJ Pike 行驶。
有了这些数据,我们需要能够根据需要对任何在长矛上行驶的人进行快照。我们还需要能够拍摄所有正在开车的男性或收费公路上的所有女性的快照。我们还需要能够按年龄、性别、品牌、型号等进行搜索。
现在想象一下,我们需要根据车内人数、理想乘员人数、已经排队的汽车数量以及应该进入的理想汽车数量来计算每辆汽车应该进入哪个收费车道排队。
这是一个非常简单的例子,虽然很能代表我们的问题。
-- 结束编辑
提前致谢!
【问题讨论】:
-
听起来是一个非常有趣的项目!这并不能直接解决您的问题,但您可能想在选择使用 db4o 许可之前好好看看它:db4o.com/about/productinformation/whitepapers/#gpl
-
感谢您的评论!这是定义。一个有趣的项目 :) 我已经看到了他们的许可模式,如果需要,我们已经准备好为解决方案付费。因为我希望避免 BerkelyDB 的建议,所以我把它从我的原始帖子中删除了。 (个人喜好,真的)=)
-
好吧,如果 BDB 是可能的,那么 SQLite 肯定是。您可以将它用作简单的键/对象存储,并且一些用户发誓它在该领域大大优于 BDB,特别是对于大型数据集。 (免责声明:我没有亲自尝试过)
-
哈维尔的观点很好,我们正在测试中。虽然我们没有真正的键/值,我们正在添加一些其他元数据列,以使我们更容易获得我们需要的东西。不过,我们确实预见到了一些问题。在 SQLite 方法中,我们如何搜索对象中的属性?我们的解决方案(我们正在测试,所以不是真正的解决方案)是将这些字段添加为元数据列。还有交联问题。我们可以找到一个项目有哪些类别(它在对象上),但是我们如何找到哪些项目是一个类别的一部分?
标签: android sqlite object-oriented-database oodb