我正在寻找的是支持以下功能的数据库:

1)在数据库中的记录是像Python字典或Perl散列。例如,“购买”记录可能是这样的:

<purchase 5436> = { product: "BMX Bike", price: 99.50, city: "Springfield" }

2)的记录被存储在可变长度的阵列。该数据库包含大量的这些阵列。例如,购买表可能是这样的:

purchase array 1: [ <purchase 5436>, <purchase 54>, <purchase 112> ]
purchase array 2: [ <purchase 76>, <purchase 5984>, <purchase 1102>, <purchase 12> ]
...
purchase array 658: [ <purchase 10142>, <purchase 35>, <purchase 6458>, <purchase 23> ]

3)我希望能够做两类型的查询此数据库上:

3a)的计数的匹配各种条件的记录的#。例如,有多少购买超过50的值作了?我知道很多支持该数据库的。

3b)的计数记录出现在一定的顺序的次数。例如,有多少阵列有购买超过50制成,然后在“斯普林菲尔德”购买被做?我不知道你会用来做什么样的数据库。

编辑:响应史蒂夫·黑格:我应该提到,速度是重要的,而这个数据库需要支持千兆字节的数据。例如,可能有10亿点购买的阵列,我想指望他们多少有购买“斯普林菲尔德”,然后在“故乡”购买(注意顺序很重要)。也许我错了,但我认为一个关系数据库将用于此目的的太慢了。

有帮助吗?

解决方案

您确定了关系数据库使用的链接或连接表,你不能这样做呢?

您将具有订单的列,产品在列和表顺序的产品,其具有用于每个订单的每个产品的行。

我觉得这文章,可能比我更好的表达能。

其他提示

  

例如,有可能是   10亿个购阵列和I   想看看有多少人有   购买“斯普林菲尔德”,其次是   在“故乡”购买(注意:   顺序很重要)。也许我错了,   但我认为关系数据库是   太慢用于此目的。

你描述的是典型的数据仓库查询和AFAIK那些通常使用关系实现数据块,虽然被报告,而不是并发事务处理而优化的。不过,我不认为如果你使用“常规” RDBMS在速度上的差异将是极端的。当然,如果你有足够的钱,你可以去专门的数据仓库DBMS。

这是速度最重要的影响是怎么回事的是1)quering大型的基于磁盘的数据集进行优化的技术 - 究竟那是什么都“真实” DMBSs的报价,和2)以正确的方式组织的数据。

  

3b)的计数次数的记录数   出现在一个特定的顺序。对于   例如,有多少数组是有   分别购买了50制成,并   然后在“斯普林菲尔德”购买了   制作?我不知道是什么样的   数据库,你会用它来做到这一点。

您将使用与旨在支持那种查询的架构。你将不得不放弃你的数据应该如何表示先入为主的观念。

您并不真的需要一个关系型数据库作为你只是键 - >于类别分组值对,你就需要在两个表之间的连接(一个用于记录,一个用于集合)进行迭代的记录收集和你的情况是不值得的成本。

有关您的性能需求,你需要的是确保整个结构装入内存,并且不需要访问磁盘。您可能需要几台服务器要做到这一点,并分派查找到其他服务器的高手(假设你的结构的大小比内存的合理数量,一个现代化的服务器可以处理更大的,那你的速度要求都那么大,你买不起磁盘分页。

有关那种你提到的查询,你最好的选择是有一点的数据冗余。在插入,你会跟踪这些计数。数据冗余帐篷焦虑不安的人通过阅读的名字,但它有时是必要的。只要是您的实现非常小心,在这里投资的单元测试的一个良好的数额。

有可能,不过,有些类型的查询,你将永远不会成为能够实时做以毫秒为单位的事,而一个大约有一个条件查找购买,然后购买另一种情况似乎是这个。要么你觉得维持这种号码的实时跟踪,同时插入/删除/修改的办法,或者你将不得不actualy您遍历数组数以百万计的,没有办法避免这一点。你需要考虑你的数据如何近期需要是,也许预先计算每几个小时,产生这些统计数据,然后可以(1)查找键来访问为O。

在简单地说,你的问题是远远超出你决定使用来解决它的技术。

我不知道我完全理解你在找什么,但你看 CouchDB的? 。 其文件取向和模式分类

你所描述颇为相似流行性腮腺炎即使我对有些疑惑能力来定义的查询,其中的“记录”,在阵列中的次序是可能的。

看一看的链接,还有这也是目前的商业版本,你会看到的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top