【问题标题】: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。

标签: mongodb


【解决方案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 语法获得更快的搜索时间和更轻松的数据操作。

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 2014-05-11
      • 1970-01-01
      • 2011-05-26
      • 2012-03-07
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多