store/query semi-structure data

时间:2015-05-24 20:44:15

标签: perl data-structures nosql

We had application written in perl that create complex data structure for our subscriber (we have move than 4m subscribers). each subscriber have some conmen fields that are are present in all of them and some other subscriber has missing some.

The data looks like this:

%subscribers = {
    "user_001" = {
        "name" => "sam",
        "age" => "13",
        "color" =>['red','blue']
        "item"=>{
            "old" =>['PC','pen'],
            "new" =>['tap','car']
        },
    "user_002" = {
        "name" => "ali",
        "age" => "54",
        "color" =>['red','null','green']
        "item"=>{
            "old" =>['phone','TV']
        },
    "user_003" = {
        "name" => "foo",
        "age" => "02",
        "item"=>{
            "old" =>['']
        },
        ....
    }
}

our data are more nasty and complex

Now we try to store these data in DB then do some query in them like get user that have new 'TAPs' in item or there age is larger than 30 years.

what we need to know is: What is the best method to store the data (as MySQL or Oracle db not option), we need something for semi-structure data. How to do these queries taken in mind the preformence.

We jast need headline to start our search (and yes we did our homework using Google ^_^).

BR, Hosen

1 个答案:

答案 0 :(得分:2)

听起来您的数据集仍然很小且易于管理,因此您需要非常小心地在此早期解雇传统数据库解决方案。你还没有真正提供任何理由来解释为什么SQL解决方案被解雇(近年来的新功能完全针对NoSQL用例),所以有人在我自己的网络中搜索过这个问题。过去(在一个大型的perl项目中)我会提出一些你应该问自己的问题:

  1. 新技术选择是否会成为权威数据存储,或者只是为了帮助您进行查询而只需要最少的更改即可实现?
    • 如果你只是想快速启动一个新的API来提供服务查询,那么像MongoDB这样的NoSQL技术(具有优秀的perl driver)就成了一个可行的选择(你可以在你的#39中使用perl哈希) ;用非常少的代码描述)。如果您仅将其用作(可能是只读)缓存,则可以缓解所有持久性问题并避免大量昂贵的数据清理/验证/规范化工作,从而使您快速达到80%的解决方案。
    • 如果你想要一些耐用的东西来替换你当前的数据存储,那么除了SQL RDBMS之外还有其他选择。像eXistDB这样的XML存储非常强大,如果您已经使用XML生态系统并且您的数据符合XQuery / XPath有意义的文档对象范例(甚至还有perl RPC thing )。如果您有时间压力和体面的预算,那么值得看看MarkLogicEnterpriseDB等商业供应商。如果您的数据真正凌乱,并且可以有效地建模为实体和关系的图表,那么很有可能会考虑诸如SparkleDBNeo4j或{{然而,在我有限的接触这些东西的同时,他们有很大的潜力来维护其他不可能或困难的查询/分析,它们是一个很好的地方来策划和管理你的核心业务数据。
  2. 您希望做什么类型的查询,报告/分析?这将决定需要多少数据清理和规范化工作。回答这个问题将帮助您集中精力:
    • 如果您认为您最终会进行数据清理/验证/转换以实现最终选择并使数据可查询,那么您可以使用传统的SQL数据库,但在&#中探索使用它34; NoSQL的"方式(有很多建议/比较Virtuoso)。
    • 如果您希望避免由于时间或预算不足而进行大量数据清理/验证/规范化,我担心更成熟的XML / RDF / SPARQL解决方案需要多花费10倍的工程量才能完成设计并建立一个围绕凌乱数据建立的工作系统,而不是简单地清理它。
    • 如果您有真正凌乱的异构数据(特别是当您需要从无法控制的第三方继续导入并且您希望避免持续的数据清理工作时),那么请将您的混乱数据留下来-is"让你受到伤害。在一个极端(在成本方面,但在查询能力/表现力和准确性方面),您拥有之前提到的XML / RDF / SPARQL解决方案。在更便宜/更快/更简单(在许多情况下可能过于简单),你有竞争者,如out thereMongoDBCassandra(这绝不是一个详尽的清单,他们有不同级别的perl支持或perl客户端的质量)。