存储和访问大量数据

Posted

技术标签:

【中文标题】存储和访问大量数据【英文标题】:Storing and accessing large amounts of data 【发布时间】:2010-12-16 21:13:06 【问题描述】:

我的应用程序创建的数据片段在 xml 中如下所示:

<resource url="someurl">
   <term>
      <name>somename</name>
      <frequency>somenumber</frequency>
   </term>    
   ...
   ...
   ...
</resource>

这就是我现在存储这些“资源”的方式。每个 XML 文件的资源。根据需要,每个“资源”有多少个“术语”。 问题是,我需要生成大约 200 万个这些资源。 我已经生成了将近 500.000,我的 mac 对此并不满意。 所以我的问题是:我应该如何存储这些数据?

数据库?这很难,因为数据的结构不是固定的...... 也许将一些资源合并到更大的 XML 文件中? ...?

数据一旦创建就不需要更改。 现在我正在通过该资源文件的名称访问特定资源。

非常感谢任何建议!

【问题讨论】:

一个典型的资源有多少个词条? 你应该尝试使用 vtd-xml 来读取大量的 xml。 【参考方案1】:

并非所有数据库都是关系型的。看看例如mongodb。它将您的数据存储为类似 json 的对象,类似于您的资源。

一个使用shell的例子:

$ mongo
> db.resources.save(url: "someurl", 
                     terms: [name: "name1", frequency: 17.0,
                             name: "name2", frequency: 42.0])
> db.resources.find()
"_id" :  ObjectId( "4b00884b3a77b8b2fa3a8f77"), 
 "url" : "someurl" , 
 "terms" : ["name" : "name1" , "frequency" : 17,
            "name" : "name2" , "frequency" : 42]

【讨论】:

好的,我要试试 mongodb 或 couchdb。我猜这些可以很好地处理大型数据集? 另外,谁能确认我在不同操作系统之间移动数据集不会有任何问题? 在不知道细节的情况下,我认为 mongodb 应该可以很好地处理您的情况。您可以从任何受支持的平台通过 api 访问 mongo,如果您想将数据库移动到另一个平台,我认为您可以复制数据文件。【参考方案2】:

如果您无法预测您的数据将如何组织,那么http://couchdb.apache.org/ 可能对您来说很有趣。它是一个无模式数据库。

无论如何,XML 可能不是处理大量数据的最佳选择。

也许尝试 JSON 或 YAML 效果更好?它们需要更少的空间并且更容易解析(但是我没有大规模使用这些格式的经验。也许我错了)。

【讨论】:

【参考方案3】:

您应该明确地为每个 XML 文件拥有多个资源,但前提是您希望同时拥有所有资源。如果您只需要向任何人发送少量资源,请继续制作单独的 XML。

即使在这种情况下,您也可以保留较大的 XML 文件,并根据需要从原始数据集中生成较小的文件。

使用 SQLite3 之类的数据库可以让您使用 SQL 语法获得更快的搜索时间和更轻松的数据操作。

【讨论】:

以上是关于存储和访问大量数据的主要内容,如果未能解决你的问题,请参考以下文章

存储大量数据的最智能方法

大量时间从 Java 访问数据库

Mongodb 存储日志信息

MongoDB应用案例:使用 MongoDB 存储日志数据

键值存储之redis

MongoDB应用1——日志分析