我有一个应用程序,它将生成数百万个日期/类型/值条目。我们不需要进行复杂的查询,例如只获得日期A和B之间的X类型的每日平均值。
我确信像mysql这样的普通数据库不是最好处理这类事情的,有没有更好的系统喜欢这类数据。
编辑:目标是不说关系数据库无法处理我的问题但要知道是否有其他类型的数据库,如键/值数据库,nosql,面向文档,...可以更适应我想做的事情。
答案 0 :(得分:1)
如果你正在处理一个简单的表:
CREATE TABLE myTable (
[DATE] datetime,
[TYPE] varchar(255),
[VALUE] varchar(255)
)
在TYPE,DATE,VALUE
上创建索引 - 按此顺序 - 将为您提供有关您所描述的查询的良好性能。使用解释计划或您正在使用的数据库上的任何等效项来查看性能指标。并且,设置计划任务以定期对该索引进行碎片整理 - 频率取决于插入,删除和更新发生的频率。
就替代的持久性存储(即NoSQL)而言,你没有获得任何东西。当您想要无架构存储时,NoSQL会闪耀。换句话说,你不知道实体定义的时间。但是根据您所描述的内容,您可以清楚地了解要存储的内容,这非常适合关系数据库。
现在可以随着时间的推移进行扩展,包括将分区和每个TYPE
记录放入一个单独的表中。分区件可以按类型和/或日期完成。实际上,这取决于您正在处理的查询的性质,例如,您通常查询同一年内的值,以及您的数据库在这方面提供的内容。
答案 1 :(得分:1)
MS SQL Server和Oracle提供Partitioned Tables and Indexes的概念。
简而言之:您可以按行数对行进行分组,即按年和月分组。每个组都可以作为具有自己索引的单独表进行访问。因此,您无需访问所有行即可列出,汇总和编辑2011年2月的销售情况。分区表使数据库复杂化,但是如果表太长,则可以显着提高性能。
答案 2 :(得分:0)
根据成本,你可以选择MySQL或SQL Server,在这种情况下你必须明确你想用数据库实现什么只是为了存储,然后任何RDBMS都可以处理。
答案 3 :(得分:0)
您可以将数据作为固定长度记录存储在文件中。 对打开的文件进行二进制搜索以进行随机访问以查找开始和结束记录,然后将起始索引和结束索引之间所有记录的给定条件的相应字段汇总到文件中。