【问题标题】:File-based Document Storage in androidandroid中基于文件的文档存储
【发布时间】:2011-04-03 12:07:30
【问题描述】:

我正处于 android 笔记应用程序的早期阶段,我希望有人能指出一个很好的解决方案来存储笔记数据。

理想情况下,我希望有一个解决方案:

  • 每个便笺文档都是一个单独的文件(用于 Dropbox 同步)
  • 一个笔记可以由多页组成
  • 笔记页面可以包含二进制数据(例如图像)
  • 可以加载单个页面,而无需将整个文档解析到内存中
  • 线程安全:多个读/写可以同时发生。

XML 已失效(至少对于整个文件而言),因为我没有一个好的方法来一次提取单个页面。我考虑过使用 zip 文件,但(尤其是在压缩时)我认为它们也会在加载整个文件时卡住。

似乎应该有一个 Java 库可以做到这一点,但我的 google-fu 让我失望了。我能想到的唯一其他选择是为每个笔记创建一个单独的 sqlite 数据库。

有人知道解决这个问题的好方法吗?谢谢!

【问题讨论】:

    标签: java android sqlite document document-storage


    【解决方案1】:

    似乎关系数据库可以在这里工作。您只需要稍微使用一下架构即可。

    也许可以创建一个 Pages 表,其中每个页面都包括,比如说,它所属的文档的一个字段和一个它在文档中的顺序的字段。页面也可以有一个二进制数据字段,它可能包含在另一个表中。如果文档本身有额外的数据,也许你也有一个文档表格。

    我没有在 Android 设备上使用过 SQLite 事务,但这似乎是解决线程安全问题的好方法。

    【讨论】:

      【解决方案2】:

      我建议使用 SQLite 来存储文档。最终,这将比每次访问便笺时都尝试处理文件 I/O 更容易。然后,当有人想上传到保管箱时,您可以即时生成文件并上传。至少有一个 Notes 表和一个 pages 表是有意义的。这样,您可以单独加载每个页面,并且注释只是页面的集合。此外,您可以将图像作为 BLOBS 存储在特定页面的数据库中。基本上,如果您只需要每页一种类型的内容,那么您将在 pages 表中拥有类似 id 列和 content 列的内容。或者,如果您想支持更复杂的内容(例如多种类型的内容),则您需要将您的页面设为其他内容的集合,例如“实体”。

      IMO,关系数据库将是满足您从特定页面读取的要求而无需加载整个文件的最简单方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多