我目前正在从事基于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 |
理想居住者

该数据将经常更改。毫无疑问,在任何特定时间都会有很多人驾车驶下NJ Pike,因此它的规模还将变得越来越大。

有了这些数据,我们需要能够按需快照任何骑长矛的人。我们还需要能够对正在开车的所有雄性或在收费公路上的所有雌性进行快照。我们还需要能够按年龄,性别,品牌,型号等进行搜索。

现在想象一下,我们需要根据车上的人数,理想的乘员人数,已经排队的车数以及应该排队的理想车数来确定每辆车应该驶入的收费车道。

这是一个非常简单的示例,尽管可以很好地说明我们的问题。

-结束编辑

提前致谢!

最佳答案

这是一些观察结果,尽管我怀疑这不会直接帮助您。

我认为主要问题是:您是要在事件生成或更改数据时通过应用程序运行时逻辑来发现复杂的关系,还是要仅将数据转储到存储中然后通过查询来发现意外的关系?

如果您的业务逻辑将填充模型,那么您可以轻松地创建基于模型的数据模型不同部分的 View ,例如知道所有有男/女司机的汽车的集合。在这种情况下,基本上,您的关系是半静态的,很少改变(而那些关系另一端的数据值可能正在改变很多)。如果是这种情况,那么为什么要尝试将数据存储在数据库技术中,这迫使您不断重新计算关系(JOIN)。这只是浪费CPU,这就是为什么在模型变得复杂时您会看到性能不佳的原因。因此,一旦您回答了这些问题,就会很清楚ODB还是RDB是最佳选择。

现在的问题是,什么将在Android上运行并处理海量数据?我认为这是我无能为力的地方。我在拥有(db4o和Versant)ODB的Versant工作。现在db4o可以在Android上运行,但确实是海量数据的正确选择……不。除非您有非常孤立的数据,这些数据可以在单独的数据库中并且只能以单独的方式访问,但对我来说听起来并不像它是您的情况。我们的另一个数据库Versant并不意味着可以近乎实时地处理大量数据,但是只有客户端是100%Java,服务器是用C编写的,因此它将无法在Android上运行。

我认为您需要做一些研究,看看谁拥有可以在Android上处理海量数据的ODB。

最好的,
-罗伯特

10-07 19:41
查看更多