在生产环境中使用 postgres 进行数据挖掘 - 有更好的方法吗?

Data mining with postgres in production environment - is there a better way?

有一个 Web 应用程序 运行ning 了一年,在其生命周期中,该应用程序收集了大量用户数据。数据存储在关系数据库(postgres)中。 运行 申请(开展 业务 )并非需要所有这些数据。然而,业务人员不时要求我提供此数据数据的报告。这会导致一些问题:

  1. 有时这些 SQL 查询很长 运行ning
  2. 查询是针对生产数据库执行的(不酷)
  3. 按周或按月提供报告并不容易
  4. 部分数据的存储方式不适合此类 查询(查询效率低下)

我的想法(注意我是开发人员而不是数据挖掘专家)如何改进整个交付报告的过程是:

  1. 创建单独的数据库,定期更新生产数据
  2. 优化数据的存储方式
  3. 创建仪表板来呈现报告

问题:但是有没有更好的办法呢?是否有另一个数据库更适合此类数据分析?或者我应该看看 现代 数据挖掘工具?

谢谢!

有上千种方法可以解决这个问题,但我认为对您来说阻力最小的途径是 postgres 复制。从 PostgreSQL 站点的 wiki 查看此 Postgres replication tutorial for a quick, proof-of-concept. (There are many hits when you Google for postgres replication and that link is just one of them.) Here is a link documenting streaming replication

我之所以这样建议,是因为它符合您的所有标准,并且不超出您熟悉的技术范围。唯一的学习曲线是复制部分。

复制解决了您的问题,因为它会创建第二个数据库,该数据库将有效地成为您的 "read-only" 数据库,该数据库将通过复制过程进行更新。您可以保持模式不变,但可以更改索引并 reports/dashboards 自定义。这是您要查询的数据库。您的主数据库将是为用户服务的事务数据库,而复制数据库将为利益相关者服务。

这是一个广泛的话题,所以请尽职调查。但它也是可以为您工作并且可以快速转变的东西。

真的 进行数据挖掘(如:分类、聚类、异常检测),还是"data mining"您对数据有任何报告?在后一种情况下,所有 "modern data mining tools" 都会让您失望,因为它们有不同的用途。

你用好Postgres的索引功能了吗?您的场景听起来好像 选择和聚合 是大部分工作,并且 SQL 数据库非常适合此 - 如果设计得当的话。

例如,物化视图和触发器可用于将数据处理成更适合您的报告的方案。

对于报告,我们使用非事务性(只读)数据库。我们不关心规范化。如果我是你,我会使用另一个数据库进行报告。我将按照 OLAP 原则(星型模式、雪花)设计表格,并使用 ETL 工具定期(可能每周一次)将数据转储到只读数据库以开始创建报告。

报告用于决策支持,因此它们不必是实时的,通常也不必是最新的。换句话说,创建截至上周或上个月的报告是可以接受的。

如果您真的想尝试使用 Postgre 进行数据挖掘SQL,可以使用一些工具。

  1. 最简单的方法就是KNIME。它很容易安装。它具有全功能的数据挖掘工具。您可以直接从数据库访问您的数据,处理并将其保存回数据库。

  2. 硬核方式是MADLib。它在 Python 中安装数据挖掘功能,在 Postgres 中直接安装 C,因此您可以使用 SQL 查询进行挖掘。

两个项目都足够稳定,可以试试。