用于在Windows上存储简单数据的高读取性能数据库解决方案

时间:2011-02-25 06:16:59

标签: database performance database-design optimization nosql

虽然我有一个简单的问题,但我在过去几天里一直在努力。简而言之,这里有一个描述:

  • 我每天有大约1百万条新记录,每条记录包含record_name(字符串,大约20个字符),datevalue,记录存储大约两年( ~700mil记录在数据库中);
  • 大多数record_names每天都在重复;
  • 我需要能够在给定日期之间找到最大的价值增益,同时保留通过通配record_name来过滤结果的能力;
  • 运行它的软件需要在Windows XP上运行。
  • 最重要的是每个查询的执行时间。

到目前为止,我曾尝试使用MySQL数据库和Cassandra。虽然MySQL在Linux上具有相当可接受的性能(可以接受,我的意思是我的不那么高的技能足以编写有效的程序),但在Windows上却非常慢。 Cassandra也是如此。

从.csv文件导入插入这些数据库的数据。第一次导入需要大约5分钟到MySQL,20分钟到Cassandra,后者花费更多时间。我怀疑可能是我配置错误,但说实话 - 我没有改变配置文件中与性能相关的任何内容。

问题是:处理这类具有性能的数据的最佳解决方案是什么。编程语言并不重要,几乎任何都可以工作,因为查询很简单,用任何语言实现它们都不会花费大量时间。

非常感谢您对帮助的兴趣。

4 个答案:

答案 0 :(得分:2)

没有更多细节,所提出的问题似乎是相当经典的BI问题,其中解决方案通常是预先实现聚合数据,优化查询而不是插入。

我会先问一个简单的问题 - 您是否需要数据库中的所有数据?我很想在时间范围内烹饪不同的聚合 - 所有,记录类型等。使用简单的控制台应用程序读取行,计算聚合,然后将它们转储到SQL中以便通过查询进行访问,按日或小时将更简单,更小的行集转换为更简单,更小的行集。

虽然在所有行中选择*很酷 - 除非有真正的业务需求,否则抵制它。 考虑到聚合查询,No-SQL存储会分散注意力,简单的文件对于保留原始行存储非常有用,而SQL等工具对于聚合查询来说已经足够了。

答案 1 :(得分:1)

您需要先确定瓶颈。可能的选项:硬盘,数据库,驱动程序,应用程序代码。您还应该尝试使用postresql,但老实说,您在Windows上可靠运行的选择很少。除非你使用Windows SQL Server(不是免费的)。 Cassandra和MySql也非常不同,解决了不同的问题。

答案 2 :(得分:1)

另一个需要考虑的选择是Berkeley DB。它小巧,快速,可扩展且非常轻巧。它支持各种API,包括SQL,键值对(NoSQL)和Java对象持久性API。一般来说,Berkeley DB将胜过通用RDBMS,因为它更小,更高效并且开销更少。 Berkeley DB在Windows上运行,对于寻求简单易用的嵌入式数据管理的开发人员来说是一个很好的选择。

答案 3 :(得分:0)

SQL Server Express应该可以满足您的需求。

只需聚合数据使用SQL以获取所需的值并将其存储在其他表中。

使用此方法,您可以使用SQL Express轻松解决任何性能问题和大小限制。