OLAP与In-Memory

时间:2016-01-22 13:49:08

标签: olap in-memory

我正在使用大数据,我的所有后端逻辑都是用php编写的。因此,为了加快输出速度,以下哪种技术对我的产品有效且有益。

  1. OLAP。
  2. 内存数据库。

1 个答案:

答案 0 :(得分:1)

好吧,当我们谈论大数据时,我会选择一个OLAP数据库。但让我们仔细研究一下这些技术:

OLAP(=在线分析处理)

...具有在维度级别上预先汇总数据的基本技术思想。

我们猜你想要查询每天,每月和每年数千个订单的销售订单表。 您可以定义订单日期,销售渠道,交运地国家等维度以及营业额,订单数量,发货时间等度量。

通常,您将使用OLAP数据库回答以下问题:

  • 2016年6月我们有多少销售订单?
  • 2016年销售渠道SHOP寄往美国的营业额(销售订单总额)是多少?
  • 每周/每月平均发送销售订单需要多长时间?

......或更多技术:

您可以回答所有问题,其中SELECT子句中有聚合,where子句中有维度:

SELECT
    SUM(amount) AS Turnover,
    AVG(shipping_time) AS avg_shipping_time
FROM sales_orders
WHERE DATEPART(year,order_date) = 2016 AND sales_channel = 'SHOP'

尽管OLAP系统可以聚合,但性能会更好。因此,使用销售订单编号或将地址发布为维度将是一种不好的方法。 OLAP的想法是消除数据(或行)。这需要标准化数据。

以下问题最好在关系数据库(数据仓库)中得到解答:

  • 2016年9月的50大销售订单中有哪些?
  • 告诉我2017年1月销售订单的客户地址 等

那么什么是内存?

In Memory的想法是,在RAM中查询数据比在磁盘上查询数据更快。但RAM也很贵。

关系数据库中的内存实际上是为OLTP(在线事务处理)系统构建的 - 系统是用户进行交易和工作的系统 - 而不是用于分析。

实际上,今天的企业OLAP系统(如 SQL Server Analytics Service )在聚合数据(OLAP技术)后也使用了内存技术。你只是没有看到它。

-

所以OLAP是正确的,或者......?

让我们考虑其他事情:OLAP数据库与关系数据库不同,有时候它太大而不能使用OLAP数据库(例如,当你只有这个庞大的表时)。 需要处理OLAP数据库(聚合和准备使用)。那是 - 大部分时间 - 在没有人工作的夜晚完成(好吧,如果你愿意,你可以每秒钟做一次:-))

如果您不熟悉大数据,只想在应用程序中修复这一件事 - 并且不了解OLAP,我建议您:尝试修复它在您的应用程序代码中 - 除了您想要使用新术语,MDX而不是SQL等语言 - 挖掘新世界。

复杂性取决于您选择的OLAP数据库。但实际上,您可以轻松开发自己的" OLAP"应用程序中的聚合级别......它可能不像OLAP数据库那么灵活。

您的应用程序中可能的解决方案可能是:

  • 使用SQL Server indexed views - 或其他数据库中的类似功能
  • 使用SQL表触发器
  • 使用cron作业聚合数据并将其写入表格