如果我理解正确的话,你对底层存储和检索问题更感兴趣,而不是 DDL 和定义问题,面向列的 dbs 的类别,对吧?
我假设您了解几乎所有存储,无论供应商如何,都是以下某种形式:
在此基础之上,每个供应商都有优化和专利专业化。例如。 Sybase(行)有:
- 聚集索引,将数据行与 B-Tree 结合并消除堆。
下一个问题是所有供应商(除了 oracle)都有相当复杂的引擎,采用模块化设计,并且 I/O 在低级别异步处理以获得速度。 I/O 的单位是页。 OLTP 系统通常为 2 到 8KB,DSS 系统通常为 8 到 64KB。 (注意我避免了行与列的问题。)因此,无论行/列如何,DSS 引擎都是为大规模检索而构建的,因为在大块中获得更多的索引/数据行或列,而 I/O 请求更少。
“Large I/O”可以通过一个 I/O 请求将 Extents (8 Pages) 和更大的 AllocationUnits (256 Pages) 读入内存来执行。但基本单位是页面。
行与列
- 行
- 每一行都是页面上的一个连续单元,页面中包含许多行。
- 对于索引,这并不重要,因为整个数据结构是键中的复合列;索引条目或记录是一个小的索引条目+指针,并且更多的索引条目被打包到相同的页面中。
- 它们对于少量的行非常快;汇总列聚合的速度很慢
.
- 列
- 每一列都是页面上的一个连续单元。而且由于该列可能有数百万个条目(行)长,它们会运行很多很多页。
- 索引与上面的行相同。添加了一种特殊形式的索引,这种形式的列导航应该更快。
- 它们对于柱状骨料非常有用;从基于列的数据构造行非常慢
针对引擎执行的所有查询,都必须导航索引,从上述数据存储结构中检索数据行/列。
结果是上面的乘法;
这就是你要找的吗?上面有一组 Sybase ASE 的技术(不是温暖和模糊的)图表,一个 OLTP/DSS 严格面向行的引擎,如果你有兴趣,我可以得到。
评论回复
.
你的意思是说,无论数据库类型如何,我们最终都会归结为页面。
是的。
如果是这种情况,那么如何进行数据库集群。让我们看一个以行方式存储数据的数据库。如果我正在为这种类型的数据库进行集群,那么表结构将如何准确地传送到不同的节点(如果我有多个节点)。这个表结构会链接到一个页面还是通过不同的机制。
你知道,在我回答这个问题之前,我必须承认你。以你这样的知识水平,能深入到那个关键点,得到那个洞见,真是太好了。 Shiva ki Jai!
是的,这是集群 DBMS 的关键设计问题,关键的限制问题,尤其是与集群相关的各种设计问题;如果供应商很好地处理了这个问题,则集群运行良好;如果没有,集群就是狗早餐。
IT 中的一切都受物理定律的约束。没有什么是免费的,功能的每一个功能都有成本、处理或存储。没有魔法,除了 MS 营销手册。
良好的集群数据库架构
我不知道所有的集群 DBMS;我非常了解 Sybase CE 和 Oracle RAC。 Sybase IQ 的工作知识。
-
Oracle RAC 存在的时间更长,也更加成熟。它非常糟糕地处理了这个关键问题。因此,它最终与自己竞争,需要比最初估计更多的 CPU 能力(核心、CPU,而不是节点)。节点越多,争用越多。
.
需要注意的是,Oracle 非 RAC 架构是垃圾,或者更准确地说,是不存在的;所以 RAC 有一个坚实的基础。
.
更不用说,稳定性糟透了。
.
Sybase CE 才一岁。但该架构非常出色,它很好地处理了这个关键问题。 SAN 上只有一个页面版本。所有节点都连接到 SAN。任何节点都可以读取或写入 Page。节点通过专用 LAN 连接(除了网络上其他所有设备使用的普通客户端-服务器 LAN)。节点协调锁以及一些节点间通信以实现负载平衡等。
.
归根结底,为了获得最大的并发性,即使使用 Sybase CE,您也需要对数据库进行逻辑分区,以便每个节点上的工作负载是分开的,正在访问不同的文件路径,或者共享数据库的单独物理区域。
Sybase IQ 已经 100% 面向列。这是他们的 DW 产品。它已经完成了完全负载平衡。它可以用作集群,但不能用于上述 CE 意义上的集群。我应该把它包含在
糟糕的集群数据库架构
集群 dbms 的狗早餐类型会做一些愚蠢的事情。列举几个:
集群不适合专用数据库服务器
基本上集群对于某些应用程序来说非常有用,但对于专用数据库服务器来说这是一个愚蠢的想法(一个事实在一个地方;共享资源一起管理;锁争用在一个地方管理时最有效,因为数据是在一个地方)。我永远不会为数据库服务器推荐集群。
数据库供应商为什么要为集群烦恼
-
哦,它是有价值的,但不是现在,而是未来。 AFAIC,随着时间的推移,Sybase 体系结构将占主导地位,而所有其他体系结构都将被淘汰。每个供应商都会照常复制。
Sybase CE 的真正强大之处在于:
一家可以错开几台单节点服务器的夜间数据库维护计划的商店,可以节省相当多的钱;他们只有几台额外的机器用于切换。
数据仓库略有不同。它们大多是只读的。因此,将它托管在集群上是没有问题的(许多读取器节点,只有一个写入器节点,没有争用,没有人关心页面正在被读取时被写入)。 Sybase IQ 就是这样的产品。
面向列的 Sybase CE
Sybase IQ 已经是面向列的,可以部署在集群中,但不是上述 CE 意义上的集群。列映射到页面。我应该将它包含在上面的 Good Clustered Db Architecture 中,现在更正了。
我不知道是否值得将面向列和面向行的混合体结合起来。
但该问题的完整答案是,使用纯 Db(而非 DW),例如 Sybase ASE 或 ASE/CE,并实现真正的第六范式数据库。这就是最终的归一化,即不可约的 NF,具有几个实质性优势,包括速度和易于旋转。它在页面上提供面向列的存储。由于 SQL 不完全支持 6NF,您需要提供视图以从(存储的)6NF 结构中提供 5NF 行。我为目录编写了一个扩展,以便生成供开发人员使用的 SQL 代码。