基于行的数据库或基于列的数据库
Posted
技术标签:
【中文标题】基于行的数据库或基于列的数据库【英文标题】:Row based database or Column based database 【发布时间】:2019-05-05 09:47:32 【问题描述】:我们正在开发一个审计系统,让审计员可以访问上一季度处理的交易。审计员对数据进行各种分析,以找出有一些异常的无效/错误交易。
通常,这些分析需要在某些图表上显示数据以查看外层,或者有时基于多个列进行重复检测。 有时异常检测算法非常复杂,需要使用存储过程的多个处理步骤。 请注意,分析很少涉及大行的聚合。
有时,如果他们发现某些数据丢失或不正确,他们可以更改这些数据。 我们正在评估基于行(sql 和 nosql 数据库)和列存储(如数据仓库系统)。
这是数据仓库或基于行的存储(如 nosql 或某些 RDBMS)的用例吗?
简而言之,要求是: - 不定期更新 - 主要读取过去 3 个/月数据的查询 - 读取数据需要几个消息传递步骤,例如在步骤 1 中创建临时表,在步骤规则中与另一个表形成连接,删除一些行等。
谢谢
【问题讨论】:
“分享他/她的想法以供选择”不是主题问题。 How to Ask 我已将问题编辑得更具体 您的“要求”中没有任何内容可以让人们选择一种 DBMS 或 DBMS 实现风格而不是另一种——而且无论你如何编辑它们都不会——直到你完成大量的研究、调查和估计——然后你就不需要我们了——即使这样,如果没有实际的多重实施和测量,你也不会确定正确的答案。看我的下一条评论。这种问题太笼统了。而且也没有经过研究——您需要了解和总结您的需求、可用的 DBMS 和您的成本/收益,而不是要求我们这样做。 我目前的通用评论是“更好”/“最好”等:除非你定义它,否则工程中没有“更好”/“最好”之类的东西。同样不幸的是,所有合理的实际定义都需要大量的经验,以及与对细节的混乱敏感度相互作用的大量因素。进行简单的设计。当您通过测量证明您可以想到的设计和所有替代方案都存在问题时(无论当时意味着什么),然后提出一个非常具体的问题。这也应该定义“更好”/“最好”。 meta.stackexchange.com/q/204461 亲爱的philipxy,我只是询问了一些方向。请检查 RADO 答案。在回答这个问题时,他很到位。我们不是生活在一个理想的世界里,在那里你有时间进行“大量的研究和估计”。我们肯定会从一些基于 POC 的东西开始,并在一段时间后重新评估我们的决定。我知道这个问题并不具体,但我相信,它是一个重要的问题,对其他问题也很有用。 【参考方案1】:对于您的任务,如何存储数据并不重要。您需要考虑如何创建实体维度模型、正确填充数据以及使用哪些报告工具。
举个例子,下面是我在项目中使用的几个常见设置:
微软堆栈设置:
用于数据存储的 SQL Server 用于数据 ETL 的 SSIS(如果您知道自己在做什么,也可以编写自己的存储过程) 在同一 SQL Server 上发布维度模型。如果您的数据集很大(超过十亿条记录),请改用 SSAS 表格 Power Pivot 或 Power BI 用于交互式报告,或 s-s-rS 用于分页报告。开源设置:
PostgreSQL 用于数据存储 使用存储过程和/或 Python 处理数据 将维度模型发布到另一个 PostgreSQL 数据库。如果您的数据很大,请将维度模型发布到 Redshift 或 其他列式数据库 使用 Tableau 或 Power BI 进行交互式报告,或构建您自己的报告界面。我认为 NoSQL 数据库在这里是一个错误的选择,因为审计需要高度结构化的数据。
【讨论】:
您好雷达,感谢您的回答。尺寸将是仓库的唯一标准。我们正在考虑 GCP BigQuery。我相信,由于这是完全托管的服务,大小无关紧要。即使大小不是很大,我们也可以使用它。在我们的案例中选择数据库或仓库时,我们还应该考虑哪些其他因素。偶尔更新可能是其中之一。更新数据时,仓库有点慢。我们可能需要一些有针对性的查询或分页。这些查询可能会以更高的费率收费,因为它们会导致表扫描而不是索引扫描,Bigquery 是按需付费。 很遗憾,我没有使用 BigQuery 的经验。在这种情况下我会做什么——创建一个示例数据集并在您正在评估的任何平台上构建快速原型。从表面上看,他们都将自己推销为伟大而令人敬畏的人。但只有经验才能判断他们是否真的兑现了承诺。 根据我的经验,到目前为止,最困难的任务是从源数据构建一个合适的、高质量的维度模型。通常,这是工作量、成本和麻烦的 70-80%。其余的(报告、分析、平台等)的痛苦要小得多。我会相应地集中您的研究/评估。 我了解RADO,感谢您的快速帮助!顺便说一下,对仓库进行火分页和针对性查询可以吗?你不认为这些会比 RDBMS 更昂贵(在资源消耗方面),因为它们会完整扫描列。以上是关于基于行的数据库或基于列的数据库的主要内容,如果未能解决你的问题,请参考以下文章