问题标签 [columnstore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
159 浏览

amazon-s3 - MemSQL 列存储表磁盘与内存

我有一个包含 8 个 m3.2xlarge 叶节点(2x80 SSD,30GB RAM)的集群。

关于我的数据:

  • 我有一个数据库
  • 我有一个列存储表。
  • 我的数据位于 s3 中。
  • S3 文件大小为 250GB。
  • 数据分为 40 个 6GB 文件。

当我尝试将此数据加载到表中时,导入过程在加载大约 60GB(10 个文件)的数据后失败。此时,Leaf MemSQL 内存几乎已满(212GB)。磁盘容量为 1.64TB,但仅使用了大约 150GB。

据我了解,ColumnStore 表位于磁盘中。如果是这样,为什么磁盘没有填满,而是叶子内存用完了?

需要注意的几点:

  • 导入过程不断尝试处理其余文件并在每个文件中加载部分数据并失败。
  • 在 8 个叶节点中,只有 2 个完全填满了内存(30GB 中有 27 个)。其余的约为 17GB
  • 我使用 cloudformation 来设置集群,所有参数都设置为默认值。

我配置不正确吗?

任何帮助表示赞赏。

谢谢,拉姆。

0 投票
2 回答
1119 浏览

sql-server - 聚集列存储索引中发生死锁

我们在保存订单履行的事务表中使用聚集列存储索引。该表由不同的会话定期更新。但是,每个会话都特定于订单作业编号,因此他们不会尝试同时更新同一行。但是,由于会话之间的以下情况,我们面临死锁问题。

  • 行组锁定和页面锁定
  • 行组锁定和行组锁定

这并不特定于存储过程。这是由于作为订单履行的一部分,多个存储过程按顺序一个接一个地更新此表。

表的示例模式非常简单:

我已经给出了示例死锁图供您参考。请让我知道,我可以采取什么方法来避免这种僵局情况。我们需要此表中的聚集列存储索引,因为我们正在执行聚合操作以查看个体已经完成了多少次。如果没有列存储索引,它可能会更慢。

在此处输入图像描述

0 投票
3 回答
1662 浏览

sql - 列式数据库优化与关系型数据库优化有何不同?

我有以下数据库结构,存储在关系数据库中:

  • 两个事实表,每个表约 8000 万行
  • 具有 300,000 - 500,000 行的三个维度表
  • 两个事实表都有 3 个外键,用于连接维度表
  • 一张安全表也有 3 个外键用于连接维度表

一位开发人员正在使用我的数据创建一个使用列式数据库的应用程序。他们一直遇到性能问题,当我建议向他们的表中添加索引/键时,他们说索引列式数据库不会提高性能。结果,他们要求我将事实表与维度表结合起来。

这似乎与我对数据库管理基本原则的了解相矛盾。列式数据库真的不能使用索引来提高性能吗?应采取哪些步骤来优化色谱柱性能?

我正在寻求高级信息,但为了完整起见,关系数据库是Teradata,列数据库是SAP HANA。

0 投票
1 回答
1228 浏览

database - MariaDB 列存储 LAST_INSERT_ID() 替代

环境:

操作系统:CentOS 7.2

数据库服务器:10.1.23-MariaDB 列存储 1.0.9-1

2个测试数据库,1个InnoDB和1个Columnstore:

问题:

我在 InnoDB 表中运行了几个插入:

当我想获取最后插入的 id 时,我运行以下命令:

并且结果正确显示了在当前会话期间插入的最后一个 ctlid 值,无论是否有其他并发会话在该 InnoDB 表中运行插入并触发创建其他 ctlid 值。到目前为止,一切都很好..

现在,我对 Columnstore 表执行了几次插入操作:

我想实现与上述相同的行为,但不幸的是,Columnstore 忽略了这一点:

我使用了以下替代方法:

但两者都显示出一个主要限制:如果其他并发会话运行插入,则上述两个查询的结果会受到这些插入生成的自动增量值的影响。基本上我可能不会得到预期的最后插入的 id,但如果其他会话并行创建自动增量值,我可能会得到更大的。

我也尝试过:

  • 锁表

  • 执行插入

  • 使用获取最后一个插入 idselect callastinsertid('test_cs')

  • 之后解锁桌子

但看起来列存储不支持锁定表。

是否有可能使用 Columnstore 实现一致的最后插入 id(每个会话)?

我们的计划是将我们的一些功能从 MariaDB/MySQL 切换到 Columnstore,但上面的限制非常阻塞。

0 投票
2 回答
853 浏览

sql-server - 如何优化 SQL Server 列存储对齐

我有一个用于 IOT 指标(时间序列数据)的聚集列存储索引表。它包含超过 10 亿行,结构如下:

从 2008 年到现在,有大约 10,000 个不同的 DeviceId 值和时间戳。针对该表的典型查询如下所示:

当我执行此查询时,我会得到以下性能指标:

因为目前像上面所说的查询会读取太多的段,我相信:

查询计划: 查询计划

我相信这没有得到很好的优化,因为读取了 11 个段以仅检索 10 亿个源行中的 212 个(在分组/聚合之前)

然后我运行 Niko Neugebauer 的出色脚本来验证我们的设置和列存储对齐https://github.com/NikoNeugebauer/CISL/blob/master/Azure/alignment.sql,我在重建列存储聚集索引后得到了这个结果:

列存储对齐

MetricId 和 TimeStamp 列的最佳对齐分数为 100%。我们如何确保 DeviceId 列也很好地对齐?我在初始聚集(行存储)索引中使用了列顺序,这是可以优化的地方吗?

0 投票
1 回答
772 浏览

columnstore - 是否可以在 clickhouse 中通过插入查询直接存储 HyperLogLog / uniqState() 状态?

我们可以使用 AggregatedMergeTree 表引擎,它可用于聚合行。

通常在聚合数据中,我们对存储所有唯一标识符不感兴趣,并且仍然希望进行不同的计数。我们仍然希望能够进行另一个聚合以在之后获得这些行的唯一计数(通过选择查询中的分组行)。这就是 HyperLogLog 派上用场的地方,它被实现为 clickhouse 中的 uniqState 函数。

我想通过插入查询直接存储一个超级日志,并从我的客户端应用程序将其提供给 clickhouse 表。这可能吗?

0 投票
0 回答
83 浏览

sql-server - 使用多个连接加速 SQL 查询

我有一个运行中型 SQL Server express 数据库的 .NET 电子商务解决方案。系统查询涉及许多连接(可能有 20 个表)的订单数据,这非常慢,特别是在大量使用期间,我想我已经用尽了索引表和优化查询的选项。

我现在相信最好的选择是非规范化 - 请参阅https://msdn.microsoft.com/en-us/library/cc505841.aspx

我想知道的是:

  1. SQL Server 列存储索引会是更好的选择吗?
  2. 我正在考虑在非规范化表上使用内存中 OLTP,因为内存中的数据无疑会使查询更快,但它似乎不是预期的用途,我应该这样做吗?
  3. 我应该改用 ElasticSearch 之类的东西吗?与 SQL Server 内存中 OLTP 相比有什么好处?
  4. 我应该改用 SQL Server OLAP 吗?好像有点矫枉过正...
0 投票
1 回答
987 浏览

indexing - 聚集列存储索引碎片 - 索引属性和 dm_db_column_store_row_group_physical_stats 差异

我们在多个表中使用聚集列存储索引。要确定碎片,

  1. 当我使用 sys.dm_db_column_store_row_group_physical_stats 时,我看到 0% 的碎片,
  2. 当我查询 sys.dm_db_index_physical_stats 时,我看到 90.10% 的碎片也索引属性显示页面完整度为 62.5%,总碎片为 90.10%。

列存储索引属性

哪个碎片应该被视为我的表的实际碎片。我可以通过重建索引或重建列存储分区来删除碎片吗?

请建议。

0 投票
1 回答
689 浏览

sql - 无法在 Mariadb 列存储中创建文本数据类型

https://mariadb.com/kb/en/library/columnstore-create-table/

这么说,它的工作原理..

DROP TABLE IF EXISTS `orders`; CREATE TABLE orders ( orderkey INTEGER, customer VARCHAR(45) ) ENGINE=ColumnStore;

此页面说支持 TEXT 数据类型。

https://mariadb.com/kb/en/library/columnstore-data-types/

ColumnStore 支持以下数据类型: TEXT

但这不起作用..

DROP TABLE IF EXISTS `orders`; CREATE TABLE orders ( orderkey INTEGER, customer TEXT ) ENGINE=ColumnStore;

ERROR 1178 (42000): The storage engine for the table doesn't support The syntax or the data type(s) is not supported by Columnstore. Please check the Columnstore syntax guide for supported syntax or data types.

我正在运行 1.0.11。我是这样理解的:
wget https://downloads.mariadb.com/enterprise/htxx-hpee/mariadb-columnstore/1.0.11/ubuntu/dists/xenial/main/binary_amd64/mariadb-columnstore-1.0.11-1-xenial.x86_64.deb.tar.gz

我的安装代码在这里:

https://github.com/dgleba/vamp206a/blob/master/apps/mcs/mariadbcolumnstore-step1.sh#L84

我然后运行a2/24start.sh/apps/mcs/mariadbcolumnstore-step1.sh然后按照中的命令...step2.sh

任何人都可以阐明文档说 TEXT 受支持的事实,但我收到此错误?

0 投票
3 回答
288 浏览

sql - SQL Server 中的列存储索引

SQL Server 中的列存储索引是否仅在查询使用聚合函数时有用?