我目前正在研究一个基于Android的项目。该软件将在不介绍许多详细信息的情况下,将在自定义构建的设备上运行。硬件永远不会改变,并且永远是相同的。这是一个明确的加上:)

话虽如此,该项目要求我们在设备上存储大量数据 - 在某些表中超过3m行。 SQLITE处理扫描这么多行对我们来说很好,当我们开始进行复杂的连接以带回我们需要的所有相关数据时,问题就出现了。我们已经考虑过将数据库分配规范,但担心会将数据库推到可用范围之外。

我们正在考虑使用面向对象的数据库,例如DB4O或NEODATIS。我们的希望是,通过存储对象,我们可以连续摆脱关系并将它们存储在对象上(就像OOP一样)。问题是我们无法找到与Android上运行和使用的这些ODB的任何相关基准(至少不是最近的基准)。

有人在Android上有任何OODB的经验和/或储存和访问大量数据的经验吗?如果是这样,您可以提供任何建议,将不胜感激。

- 编辑

这是我们面临的问题的示例。它与我们的应用程序无关(我的NDA说我不能发布任何特定内容),但是此示例很好地表示了问题。

想象一下,我们正在构建一个应用程序,以监视在任何给定时间在新泽西收费公路上驾驶的每辆车。对于任何给定的汽车,我们需要跟踪汽车的制造和型号,车上有多少人以及汽车中的人的人口统计。因此,基本上您最终得到了看起来像 -

id |颜色| make_id | in_toll_lane | model_id

制作

id |姓名

模型

id |名称| make_id

car_person

id |年龄|性| IS_DRIVER | car_id

toll_lanes

id | cars_in_line | Ideal_cars_in_line |理想_ocupant

这些数据将经常更改。它也将变得相当大,因为毫无疑问,很多人在任何给定时间都沿着新泽西州的派克行驶。

有了这些数据,我们需要能够按需拍摄任何在派克上开车的人。我们还需要能够拍摄所有开车的男性或收费公路上的所有女性。我们还需要能够按年龄,性别,制造,模型等进行搜索。

现在想象一下,我们需要根据汽车中的人数,理想的乘员数量,已经排队的汽车数量以及应排队的理想汽车数量来弄清楚每辆车应该涉足什么车道。

这是一个非常简单的例子,尽管非常代表我们的问题。

- 结束编辑

提前致谢!

有帮助吗?

解决方案

这里有一些观察,尽管我怀疑它不会直接帮助您。

我认为主要的问题是:您是否要通过应用程序运行时逻辑来发现您的复杂关系,因为事件生成或更改数据,还是只需要将数据转储到商店中,然后通过查询发现不前瞻性关系?

如果您的业务逻辑将填充模型,那么您可以轻松地创建基于模型的数据模型的基于模型的视图,例如收集,这些收集知道所有具有男性/女驾驶员的汽车。在这种情况下,基本上,您的关系是半静态的很少变化的(而这些关系的另一端的数据值可能正在发生很多变化)。如果是这种情况,那么为什么要尝试将数据存储在数据库技术中,该技术迫使您不断重新计算关系(JOIN)。这只是CPU的浪费,这就是为什么随着模型变得复杂,您会看到糟糕的性能。因此,一旦您回答这些问题,就可以很清楚的是ODB或RDB是否是最佳选择。

现在的问题变成了,在Android上会运行什么并处理巨大的数据?这是我认为我无能为力的地方。我在拥有(DB4O和Versant)ODB的Versant工作。现在DB4O将在Android上运行,但实际上是对大数据的正确选择...不,除非您拥有非常孤立的数据,这些数据可以在单独的数据库中并仅孤立地访问,并且对我来说听起来不像您是您的情况。我们的其他数据库,versant并不是要接近实时处理庞大的数据,但是只有客户端是100%Java,服务器是用C编写的,因此它不会在Android上运行。

我认为您将需要进行一些研究,以查看谁有ODB,可以处理有关Android的大量数据。

最好,罗伯特

其他提示

您对数据访问需求或数据加载的影响不多。

如果您有3m主行,然后有一堆较小的叶桌,那么您可以通过将所有叶片桌子夹在RAM中,然后手工“连接”来做得很好。许多系统具有很小的叶片表(尤其是与主要数据相比),因此将它们加载到RAM中,然后在加载行时简单地查找它们,这是一个很大的胜利。

显然,您不会使用主要的父母关系来做到这一点,但是如果您可以消除叶子的连接,那么阅读成为父母和子女之间的单一连接,而不是对父母,孩子和叶子表的六打。 。

即使这对所有叶片表都不起作用,如果它适用于绝大多数,也足以使您越过驼峰。

代表DB4O:我们对Android进行所有回归测试,因为我们认为它将成为DB4O的非常重要的平台。

DB4O非常适合300万个物体的数量级。

我们正在针对其他数据库进行基准测试 http://www.polepos.org/ 我们很快将发布一个新版本的基准标准,在该版本中我们运行了一个复杂的设置,也针对Sqllite。将基准分配给Android也是一个考虑因素。

如果加入正在杀死您的性能,并且您拥有非常异体的数据,那么DB4O可以比关系数据库更好。

您的应用听起来很有趣。如果您需要评估DB4O的帮助,请大喊大叫。

Jason:要达到任何DB4O成员,您必须使用此模式:firstName @ db4o.com最好!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top