gpt4 book ai didi

android - 需要在 Android 设备上存储大量数据,考虑使用 OODB

转载 作者:IT王子 更新时间:2023-10-29 06:20:12 24 4
gpt4 key购买 nike

我目前正在从事一个基于 Android 的项目。无需深入了解许多细节,该软件将在定制设备上运行。硬件永远不会改变,永远是一样的。这是一个明确的加分:)

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

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

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

-- 编辑

这是我们面临的问题的一个例子。它与我们的应用程序无关(我的 NDA 说我不能发布任何具体内容)但这个例子很好地代表了问题。

假设我们正在构建一个应用程序来监控在任何给定时间在新泽西州收费公路上行驶的每辆车。对于任何给定的汽车,我们需要跟踪汽车的品牌和型号、车内有多少人以及车内人员的人口统计信息。所以基本上你最终得到的数据看起来像 -

汽车

编号 |颜色 |制作编号 |in_toll_lane |型号_id

制作

编号 |姓名

型号

编号 |姓名 |make_id

汽车人

编号 |年龄 |性别 |is_driver |车号

收费车道

编号 |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。

最好的,-罗伯特

关于android - 需要在 Android 设备上存储大量数据,考虑使用 OODB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com