最近,我开始研究HBase(面向列的数据库之一)。在查看源代码时,一个问题不断涌入我的脑海。想问这个。
我的问题是,面向行的数据库如何准确地处理信息检索(例如选择查询),而面向列的数据库又有什么不同。
这些数据库在底层平面文件中存储数据的方式有所不同(最终,每个数据库都使用文件)。
如果我在此问题的任何部分出了错,请务必纠正我。
问候,
克里希纳
最佳答案
如果我对您的理解正确,那么您对底层存储和恢复问题更感兴趣,而对DDL和定义问题(面向列的dbs的类别)更感兴趣。
我将假设您了解几乎所有存储,无论是哪个供应商,都是某种形式的:
在此基础之上,每个供应商都有优化措施,并获得专利专长。例如。 Sybase(行)具有:
下一个问题是,所有供应商(除oracle外)都具有相当复杂的引擎,具有模块化设计,并且I/O在较低级别上异步处理以获得速度。 I/O的单位是页。对于OLTP系统,通常为2至8KB,对于DSS,通常为8至64KB。 (注意,我避免了行与列的问题。)因此,无论以行/列为单位,DSS引擎都是为大规模检索而构建的,这是因为在大块中以更少的I/O请求获得了更多的索引/数据行或列。
可以通过一个I/O请求将范围(8页)和较大的AllocationUnit(256页)读入内存来执行“大I/O”。但是基本单位是Page。
行与列
。
针对引擎执行的所有查询都必须导航索引,从上述数据存储结构中检索数据行/列。
结果是上述乘积;
那是你要找的东西吗?对于Sybase ASE,这是一套严格的面向行引擎OLTP/DSS的引擎,上面有一组技术图(不是温暖的和模糊的),如果您有兴趣的话,可以尝试一下。
对评论的回应
。
您的意思是说,不管数据库类型如何,最终我们都会归结为页面。
是的。
如果是这种情况,那么如何完成数据库集群。让我们以一个以行方式存储数据的数据库为例。如果我要为这种类型的数据库进行集群,那么将如何将结构化的表精确地传送到不同的节点(如果我有多个节点)。该表结构将链接到页面还是通过其他机制。
你知道,在我回答问题之前,我必须承认你。对于具有您一定知识水平的人,您能够深入到关键点并获得洞察力是非常棒的。 Shiva ki Jai!
是的,这是集群DBMS的关键设计问题,关键的限制问题,首先是与集群相关的各种设计问题;如果供应商能够很好地处理此问题,则集群可以正常运行;如果没有的话,集群就是狗的早餐。
IT中的一切都由物理定律支配。没有什么是免费的,功能的每个功能都有成本,处理或存储费用。除了MS营销手册以外,没有任何魔术。
好的集群数据库架构
我不知道所有集群DBMS;我非常了解Sybase CE和Oracle RAC。 Sybase IQ的工作知识。
。
应当指出,Oracle非RAC体系结构是废话,或更确切地说是不存在的。因此RAC具有坚实的基础。
。
更不用说,稳定性糟透了死熊。
。
。
最终,即使使用Sybase CE,也要获得最大的并发性,就需要对数据库进行逻辑分区,以便分离每个节点上的工作负载,访问不同的文件路径或共享db的单独物理区域。
集群数据库架构较差
狗早餐类型的群集dbms做愚蠢的事情。列举一些:
群集不适用于专用数据库服务器
基本上,群集对于某些应用程序来说非常有用,但是对于专用数据库服务器来说这是个愚蠢的主意(一个事实集中在一处;共享资源一起管理;锁争用在一个地方进行管理时效率最高,因为数据位于一个地方)。我永远不会为数据库服务器推荐群集。
为什么数据库供应商会打扰群集
Sybase CE的真正功能是:
一家商店可能会错开其几个单节点服务器的每晚db维护计划,因此可以节省大量资金;他们只有几个附加的机器用于切入/切出。
面向列的ojit的Sybase CE
关于java - 行数据库和列数据库在处理信息检索方面的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4152100/