我正在尝试确定用于存储相对静态但需要以多种不同(运行时指定)方式计算的信息的数据库系统。数据的基本轮廓是美国国会的投票:
账单:
点名:
投票:
国会议员:
一段时间:
我希望能够轻松构建如下的查询:
我将拥有这些有限数量的查询类型,但会动态生成所涉及的账单,唱名表决,政党等。
底层数据的最佳存储机制是什么,它允许我动态地尽可能地发出这些查询?
答案 0 :(得分:4)
这看起来像是非常标准的关系数据给我。任何RDBMS(MySQL,SqlServer,postgres等)都可以。
或者您是否就如何制作表格来存储这些数据提出建议?
答案 1 :(得分:3)
你可以使用任何数据库,直到我读到:
...排名国会议员......
MySQL没有任何排名功能。我不清楚Postgres的排名支持,但Oracle和SQL Server已经支持排名一段时间了(Oracle 9i +,SQL Server 2005+)。他们都提供免费版本。
答案 2 :(得分:2)
存储机制?任何主流数据库都应该能够处理您所描述的场景。对我来说看起来很标准。
答案 3 :(得分:1)
正如其他人所说 - 任何关系数据库都可以支持一个简单的模型来解决这个问题。但是,还有一些其他考虑因素:
答案 4 :(得分:0)
这里我通常会说,使用CouchDB或其他一些无架构的NOSQL数据库。但问题规范的方式很好地为关系商店奠定了基础。此外,没有非常大量的数据需要分布式处理la mapreduce。
话虽如此,如果问题框架有点不同,没有初始关系偏差(你已经处于数据设计模式:)),那么像CouchDB这样的系统可以工作。根据要执行的分析,更加以文档为中心的方法可能会有所帮助,因为分析所需的所有信息都存在于每个文档中(非规范化)并且可以避免昂贵的连接。
每个账单可能是这些文档中的一个(在CouchDB的情况下为json),而周期为子属性/等等的rollcalls / votes / congress成员都在一个'账单'文档中。然后,您可以对执行查询的所有“账单”文档进行mapreduce。根据查询要求,不同的面向文档的设计可能有意义。
随着数据集的增长,您不必担心大小/性能,因为您始终可以使用更多服务器来执行mapreduce查询并分配负载。此外,无模式意味着文档可以随着应用程序的更改而更改,而无需昂贵的rdbms表锁定。但同样,这个数据集并没有经常发生变化,也不是很大。