如何在移动设备上处理大量数据

时间:2011-03-26 19:35:23

标签: android database sqlite text large-data

我有一个内容问题:我正在编写一个显示城市代码的应用。这是很多数据(大约8MB的文本)。我在一个sqlite3 db文件中得到它。我无法将数据放在网上供应用程序检索。我需要随应用程序发货。

在阅读如何运送这个怪物时,我发现了3种方法:

  1. 发送包含所有命令的txt文件以创建表,插入数据和创建索引,然后遍历文件并在onCreate期间运行每个命令。
  2. 在资产中发送.db文件(或者我应该使用raw)并将文件复制到/ data / data / ...
  3. 发送一组文件(txt,而不是db)并打开它们,因为我需要显示数据
    这些方法似乎都不是很好。我认为3是最好的选择,但我不确定,我将不得不创建所有文件等。此外,文件将是未压缩的,我不确定这是否最终会占用更多空间.db文件。
  4. 问题:

    1. 这样的场景有什么好的模式?
    2. 在谈论手机中sqlite3数据库的大小时,“合理”有多大?
    3. 如果我在应用程序运行时打开一个8MB的db文件并保持打开状态,那么我是一头猪吗?

3 个答案:

答案 0 :(得分:1)

在提议的三个选项中,我认为#2是你最好的选择。它与最终结果中的#1没有什么不同,并且可以实现更简单的部署。 (无需尝试即时创建数据库。)它也将比选项#3更高效,因为索引将由数据库调度和管理。如果你选择#3并尝试匹配#2的性能,你将不得不创建自己的索引,这将需要大量复杂的编码,你的内存使用量最终会大于选项(如果不是更大) #2。

  1. 在这种情况下,不确定模式是否重要。这是关于管理大型数据集的全部内容。
  2. 合理是谈论应用程序大小时的相对术语。如果它对最终用户真的有用,那么更大的应用程序将是合理的。
  3. “Hog”也是上述推理的相对术语。如果它有用,最终用户将忍受“hog”。
  4. 另一种选择是将数据库放在Web服务之后,只运送访问它的应用程序。除了在设备上实现更小的内存占用之外,它还允许更容易地更新数据。例如。每当数据发生变化时,您都不必推送更新。

    另一个想法:您是否进行了研究,以确定此数据集是否可通过公共/政府网络服务免费获取? Take a look here

答案 1 :(得分:1)

  1. 您还可以发送数据库的压缩版本,然后将其解压缩到SD卡。有些应用甚至使用两个应用程序 - 一个用于应用程序,一个用于数据。这样,内部存储空间不会被数据占用。 “data-app”只是将数据提取到SD卡,并且可以在完成任务后卸载。

  2. 有很多应用程序使用大型数据库。我觉得你应该没问题。

  3. 不知道

答案 2 :(得分:0)

嗨拉普尔可能为时已晚,但这对其他人有帮助。我自己的境界是最好的选择。

Realm

Realm是一个移动数据库,是SQLite的替代品。虽然是OO数据库,但它与其他数据库存在一些差异。 Realm没有使用SQLite作为它的引擎。相反,它拥有自己的C ++核心,旨在提供SQLite的移动优先替代方案。领域通过C ++核心以通用的基于表格的格式存储数据。这使得Realm允许从多种语言访问数据以及一系列即席查询

优势:

  • 比SQLite更快(比普通的SQLite快10倍 操作)
  • 易于使用
  • 为您处理的对象转换
  • 便于动态创建和存储数据