用于构建实时分析系统的数据库

How*_*ard 7 mysql postgresql oracle database-design columnstore

我想搭建一个类似Google Analytics的系统(仅供内部使用,流量少,功能少),主要关注

  1. 通过不同维度的用户人口统计信息,例如用户代理、操作系统、国家等,实时统计唯一的 URI 访问/PV

  2. 实时计算平均用户会话长度(如果来自同一IP的两个请求之间的差异小于1分钟)

有没有好的数据库存储可以实时启用这种查询?

ps 我目前正在测试 InfiDB。

Con*_*lls 14

无论平台如何,都有一个构建快速实时分析的技巧。我已经使用 Microsoft Analysis Services 完成了这项工作,但您也可以在其他平台上使用类似的技术。

诀窍是拥有一个可以填充近实时数据的前导分区和一个为快速查询优化的历史分区(或多个分区)。如果您将前导分区保持得足够小,那么查询也会很快。

为了管理这一点,您的ETL处理会填充前导分区,并且您会构建一个补充过程,该过程会定期将分区转换为快速查询优化格式。此过程的确切性质将因您的平台而异。

在 MS Analysis Services 上,前导分区是作为直接从表中读取的ROLAP分区完成的。尾随分区转换为带有聚合的MOLAP。其他OLAP系统的工作方式类似。在 Oracle 上,您可以在尾随分区上创建位图索引和物化视图分区以加快查询速度。其他一些系统也有这种类型的功能,尽管我不知道 MySQL 支持它。

我猜想,最便宜的主流平台是 MS Analysis Services,它只能与 SQL Server 捆绑使用,不能单独购买。要使用 2008 R2 进行分区,您将需要 SQL Server 企业版,在英国,每个 CPU 插槽的价格约为 22,000 英镑,而在池塘的另一边则要少一些。Microsoft 将在 2012 年发布 SQL Server 的新“商业智能”版本。一旦达到 RTM,该产品的 BI 版本确实支持分区多维数据集,并且比企业版便宜得多。根据您的预算和时间限制,您可以改用它。

您必须解决的问题的另一个方面是更改的数据捕获 - 有效地识别新的或更改的数据行并将其推送到ETL过程中。大多数 DBMS 供应商的 CDC 功能仅适用于他们自己的数据库,因此如果您想要一个 CDC 解决方案,您可能必须转到第三方应用程序或源上的触发器。

  • 各种第三方都将CDC应用程序用于跨数据库平台迁移。CDC 产品列表可以在有关该主题维基百科条目中看到 请注意,您可能仍然遇到集成问题。例如,IBM Infosphere CDC 只能按行而不是按批次触发外部进程,这可能会导致大数据量的效率问题。

  • 您可以在源表上创建一组触发器,将更改推送到暂存区。这将要求您对源数据库有足够的访问权限才能执行此操作,因此它可能不是供应商支持的数据库的选项。

  • 如果数据来自文件(例如 Web 服务器日志),则必须编写一个客户端进程来监视文件尾部是否有新记录。

您很可能最终不得不实施一个轮询数据源的拉取过程。在这种情况下,您必须计算出可容忍的延迟并编写您的流程,以便它在检测更改方面足够有效,从而可以足够快地运行。有一句老话,有时在嵌入式系统圈子中发现,其大意是:“当他们开始轮询时,你知道他们对可靠性越来越重视