1

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

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 个,然后在“Springfield”中进行了购买?我不知道您将使用哪种数据库来执行此操作。

编辑:对 Steve Haigh 的回应:我应该提到速度很重要,而且这个数据库需要支持千兆字节的数据。例如,可能有 1,000,000,000 个购买数组,我想计算其中有多少是在“Springfield”中购买,然后在“Hometown”中购买(注意顺序很重要)。也许我错了,但我认为关系数据库对于这个目的来说太慢了。

4

5 回答 5

2

例如,可能有 1,000,000,000 个购买数组,我想计算其中有多少在“Springfield”中购买,然后在“Hometown”中购买(注意顺序很重要)。也许我错了,但我认为关系数据库对于这个目的来说太慢了。

您所描述的是典型的数据仓库查询,而 AFAIK 这些通常是使用关系数据库实现的,尽管这些数据库针对报告而不是并发事务处理进行了优化。但是,如果您使用“常规”RDBMS,我认为速度差异不会太大。当然,如果你有足够的钱,你可以选择一个特殊的数据仓库 DBMS。

对速度最重要的影响是 1) 一种为查询基于磁盘的大型数据集而优化的技术——这正是所有“真正的”DMBS 所提供的,以及 2) 以正确的方式组织数据。

3b) 计算记录按一定顺序出现的次数。例如,有多少个阵列购买了超过 50 个,然后在“Springfield”中进行了购买?我不知道您将使用哪种数据库来执行此操作。

您将使用具有旨在支持这种查询的模式的关系数据库。您将不得不放弃对数据应如何表示的先入为主的观念。

于 2009-05-10T08:24:58.063 回答
2

您确定不能使用链接或联结表对关系数据库执行此操作吗?

您将有一列订单、一列产品和一个表 order-products,其中每个订单的每个产品都有一行。

我认为这篇文章可能比我能表达得更好。

于 2009-04-22T17:54:17.887 回答
1

您实际上并不需要关系数据库,因为您只是将键-> 值对分组在集合中,您需要在两个表之间进行连接(一个用于记录,一个用于集合)以迭代集合中的记录并在你的案子不值得。

对于您的性能要求,您需要确保整个结构适合内存并且不需要访问磁盘。您可能需要多台服务器来执行此操作,以及将查找分派到其他服务器的主服务器(假设您的结构的大小大于现代服务器可以处理的合理内存量,并且您的速度要求如此大到你负担不起磁盘分页。

对于您提到的那种查询,您最好的选择是有一点数据冗余。在插入时,您将跟踪这些计数。数据冗余只会通过阅读名称来吓坏人们,但有时这是必要的。只是要非常小心你的实现,并在这里投入大量的单元测试。

但是,可能存在某种查询,您将永远无法在几毫秒内实时完成,并且关于查找具有一种条件的购买,然后是具有另一种条件的购买的查询似乎是这样的。要么您找到一种在插入/删除/修改时保持实时跟踪此数字的方法,要么您将不得不实际迭代数百万个数组,无法避免这种情况。您将需要考虑您的数据需要多长时间,并且可能每隔几个小时预先计算一次以生成这些统计信息,然后能够使用查找键在 O(1) 中访问它们。

简而言之,您的问题远远超出了您决定用来解决它的技术。

于 2009-05-15T20:57:18.667 回答
0

我不确定我是否完全理解您在寻找什么,但是您看过couchdb吗?. 其面向文档且无模式

于 2009-04-22T17:49:55.057 回答
0

您所描述的内容与MUMPS非常相似,即使我对定义数组中“记录”顺序可能的查询的能力有一些疑问。

看看这个链接,你会看到它还有当前的商业版本。

于 2010-02-09T14:39:06.390 回答