2011-04-20 99 views
7

我目前正在构建一个应用程序,我正在为大约15,000种产品导入(当前)统计数据。在目前,如果我要为每天统计数据库维护一个数据库表,则每天将增加15,000行数据(假设每行5-10个字段主要为float,int)。显然,每年将超过500万条记录等同于一张表。什么是存储趋势数据的最佳方式?

这并不关心我如何从其他来源引入数据(并因此增加了每个新来源的500万条记录的数据库大小)。

现在数据是基于统计/趋势的数据,并且每条记录每天基本上有1次写入,并且有很多读取。为了实时报告和绘图,我需要快速访问基于规则(日期范围,值范围等)的数据子集。

我的问题是,这是存储数据的最佳方式(MySQL InnoDb表),还是有更好的方式来存储和处理统计/趋势数据?

其他选项我在这里已经讨论过: 1.多个数据库(每个产品一个),每个数据源都有单独的表。 (即Database:ProductA,Table(s):Source_A,Source_B,Source_C) 2.一个数据库,多个表格(每个产品/数据源一个) (即数据库:产品,表格:ProductA_SourceA,ProductA_SourceB等) 3.所有factual或数据库中的特定产品信息以及所有statistical数据在csv,xml,json,(平面文件)中的不同目录中。

到目前为止,这些选项都非常易于管理,每种选项都有其优点和缺点。在进入alpha开发阶段之前,我需要一个合理的解决方案。

回答

2

您可以尝试使用基于列的数据库。这些类型的数据库在您描述的分析查询方面要好得多。有几个选项:

http://en.wikipedia.org/wiki/Column-oriented_DBMS

我们已经有很好的经验,InfiniDB:

http://infinidb.org/

和Infobright的看起来不错,以及:

http://www.infobright.com/

两个InfiniDB Infobright拥有免费的开源社区版本,所以我必须遵守d建议使用这些来获得您可能获得的各种性能优势的一些基准。

您可能还想看看对数据进行分区以提高性能。

+0

我发现,谈论使用MySQL基于列引擎PDF:http://forge.mysql.com/w/images/5/54/MySQLColumnDatabases.pdf,我要看看这个选项的更多一些,我之前没有听说过基于列的存储,这可能是我正在寻找的。 – 2011-04-20 15:08:08

1

这有点依赖于你的数据看起来像什么样的聚合/趋势你想运行。大多数关系数据库对这种按时间顺序排列的数据工作得很好。即使拥有数十亿条记录,适当的索引和分区也可以快速查找所需记录。像Oracle,MySQL,SQL-Server这样的DB就属于这个类别。

可以说你使用的产品是股票,每一个股票你每天都会得到一个新的价格(一个非常现实的案例)。新的交易所,股票,交易频率将以极快的速度呈指数增长。但是,您可以通过交换来分割数据。或地区。

各种商业智能工具还能够帮助,有效地达到预先汇总数据之前的检索。这基本上是一个按照建议的面向列的数据库。 (数据仓库和OLAP结构可以提前协助按摩和汇总数据集)。

到数据仓库的想法类似,如果它只是一个时间太长了聚合的事情,你可以工作过的聚合一夜之间变成这样更快速地从查询的结构。在我之前的例子中,您可能只需要很少检索大块数据,但更常见的是某些聚合,例如52周高。您可以将大量的原始数据存储在一种格式中,然后每天晚上只有您需要的工作才能进入表格,而不是每个库存的数千个数据点,现在有3或4个。

如果您所追踪的趋势确实遍布全球或复杂的算法,完整的BI解决方案可能需要进行调查,以便您可以使用预先构建的analityic和数据挖掘算法。

如果数据结构不是很好,那么对于像Hadoop或Mongo这样的NoSQL数据库来说,你可能会有更好的运气,尽管我承认我的数据库知识更关注于关系格式。

相关问题