Database design 用于绘制随时间变化的趋势的数据结构

Database design 用于绘制随时间变化的趋势的数据结构,database-design,data-structures,Database Design,Data Structures,给定包含时间戳和文本(例如搜索引擎的查询日志)的连续到达项目的数据流,您如何存储数据,以便能够高效地检索随时间推移的总计,以绘制每个术语的趋势线 具有元组(term、date、count)的面向行的数据库可以工作,但不能用大量不同的术语进行扩展。在此上下文中应考虑哪些替代数据结构(例如,面向列的存储)?快速插入是一项重要的要求。您认为面向列的DBMS比面向行的DBMS更高效的说法是错误的,事实恰恰相反。在您的场景中,将单行插入到面向列的DBMS中的性能将非常糟糕-它们不是针对插入性能优化的,而是

给定包含时间戳和文本(例如搜索引擎的查询日志)的连续到达项目的数据流,您如何存储数据,以便能够高效地检索随时间推移的总计,以绘制每个术语的趋势线


具有元组(term、date、count)的面向行的数据库可以工作,但不能用大量不同的术语进行扩展。在此上下文中应考虑哪些替代数据结构(例如,面向列的存储)?快速插入是一项重要的要求。

您认为面向列的DBMS比面向行的DBMS更高效的说法是错误的,事实恰恰相反。在您的场景中,将单行插入到面向列的DBMS中的性能将非常糟糕-它们不是针对插入性能优化的,而是针对只读查询优化的。绝对不适用于单行插入


“快”有多快?如果有足够的I/O(快速硬盘驱动器)可用,每秒数百次写入肯定不是什么大问题。整个数据是否足够小,可以放入RAM?普通的RDBMS仍然是最安全的选择,但现在也有内存引擎可用,其性能大大优于传统的基于磁盘的引擎


对于聚合和后续报告,您可以使用汇总表,也可以使用一个名为的公共内置功能。

您认为面向列的DBMS比面向行的DBMS更高效的说法是错误的,事实恰恰相反。在您的场景中,将单行插入到面向列的DBMS中的性能将非常糟糕-它们不是针对插入性能优化的,而是针对只读查询优化的。绝对不适用于单行插入


“快”有多快?如果有足够的I/O(快速硬盘驱动器)可用,每秒数百次写入肯定不是什么大问题。整个数据是否足够小,可以放入RAM?普通的RDBMS仍然是最安全的选择,但现在也有内存引擎可用,其性能大大优于传统的基于磁盘的引擎


对于聚合和后续报告,您可以使用摘要表,也可以使用一个名为的公共内置功能。

这可能没有立即的帮助(因为这些技术还没有现成可用),但这里介绍的是面向流的数据库。演讲者(MichaelStonebraker)当然想推销他的产品,但这仍然很值得一听,特别是因为Stonebraker是RDBMS的创始人之一。他的主要观点似乎是,传统的基于磁盘的体系结构对于他需要做的事情来说太慢了一个数量级(或更多),而(冗余的)内存解决方案正是解决这一问题的方法


另外,Hadoop对于批量处理巨大的日志文件来说应该是很好的。不过,我认为这不会给您提供实时数据。

这可能不会立即有帮助(因为这些技术还没有现成可用),但这里是关于面向流的数据库的。演讲者(MichaelStonebraker)当然想推销他的产品,但这仍然很值得一听,特别是因为Stonebraker是RDBMS的创始人之一。他的主要观点似乎是,传统的基于磁盘的体系结构对于他需要做的事情来说太慢了一个数量级(或更多),而(冗余的)内存解决方案正是解决这一问题的方法

另外,Hadoop对于批量处理巨大的日志文件来说应该是很好的。不过,我不认为这会给您提供实时数据。

因为OP(在评论中)说“数据量非常大,可能每秒有数百个条目。它高于磁盘写入速度”,所以听起来像是从多个服务器聚合数据。我的建议是将存储任务分配给各个服务器

您正在使用哪些前端web服务器?Apache有一个用于记录到数据库的模块。或者使用日志循环并定期拾取文件

当您想要查看和分析数据时,可以使用Hadoop或更好的pig进行聚合。除非你真的需要,否则不要试图把它变成一个巨大的数据消防水管

清管器:

pig培训视频:

因为OP在评论中说“数据量非常大,可能每秒有数百个条目。它高于磁盘写入速度”,所以听起来好像是从多个服务器聚合数据。我的建议是将存储任务分配给各个服务器

您正在使用哪些前端web服务器?Apache有一个用于记录到数据库的模块。或者使用日志循环并定期拾取文件

当您想要查看和分析数据时,可以使用Hadoop或更好的pig进行聚合。除非你真的需要,否则不要试图把它变成一个巨大的数据消防水管

清管器:

猪训练视频:

一些想法:

如果数据量确实超过了磁盘写入速度,则必须提高磁盘写入速度(例如:RAID、更快的磁盘、ram磁盘)或将负载分布到多个服务器上。如果可伸缩性是您主要关心的问题,那么分发是关键。不幸的是,在这个问题上,我无法提供更多的智慧(拉里·K有一些可能有用的链接)

我可以在不费吹灰之力的情况下以30MB/s的速度持续写入2.5“7200 rpm的驱动器,因此我怀疑您需要比“每秒数百次”多得多的搜索引擎查询才能超过这一速度。在任何情况下,大多数关系数据库都不能很好地处理大量的单行写入。以下是一些替代方法:

  • 调查您的DBMS是否支持某种批处理或批量插入选项(SQL server的BulkCopy类可显著提高插入性能)。将某些项缓冲到一个批中,并在后台写入

  • 雷莫