-
2020-09-27 14:50:05
转载自:https://blog.csdn.net/nieson2012/article/details/79551337
列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩/解压算法。
传统的行存储和列存储的区别
1、数据是按行存储的
2、没有索引的查询使用大量I/O
3、建立索引和物化视图需要花费大量时间和资源
4、面对查询的需求,数据库必须被大量膨胀才能满足性能需求1、数据按列存储–每一列单独存放
2、数据即是索引
3、只访问查询涉及的列–大量降低系统IO
4、每一列由一个线索来处理–查询的并发处理
5、数据类型一致,数据特征相似–高效压缩列式数据库
什么是列式数据库?可能大家也才到了,既然有列式数据库,那么肯定就有行式的喽!确实是这样的。也许大多数人并不了解数据库储存模型(storage model)和数据库的数据模型(data model),不过对上层是使用者也没多大关系。不过我们现在讲的列式和行式就是指数据库的storage model,而他们支持同样的data schema,即对data model感知不到storage model的实现区别。
一个数据库的data model约定可以进行上层数据操作,而storage model决定这些操作的性能。比如,No Sql数据库使用的是data model是key-value,而储存模型有map结构实现,也可以由tree结构实现。而对于sql数据库,其数据模型是一张二维表,而至于怎么存储这张二维表,很容易就可以想到可以按行存储和按列储存。按行存储就是我们现在常见操作型数据库,而是最大众的数据库,比如MySql、Oracle、……等等你所知道大部分数据库。而按列储存的数据库现在也是很有名,比如Hive、Vertica、Druid、Infobright等。
为什么要行式数据库又要列式数据库?先让让我们想象关于二维表我们有哪些操作?—— select、update、delete和insert。这些操作都会需要找到相应的位置,所以这些操作的基础都是search。
而基本的算法都是即从时间考虑也是从空间考虑的。我们开始具体举个例子。在数据库储存作为实际的一堆储存在磁盘上的文件,在设计不得不考虑磁盘的特性。一般的磁盘特性,其实所有的储存都有一个特性就是对于locality良好的存取性能是随机存取的好几倍。我们现在把一块想像成一组固定大小的块,如图: disk logic model 而文件的内容实际会被分开按照磁盘逻辑块来储存,数据库主要任务就是怎么组织这些逻辑块来取得更好的读取性能和便捷性。
在不考虑索引的情况下,所有的磁盘读取都是顺序读取,这意味了要查找一个东西,都需要扫描全表或者部分表。很直观的道理,读取的性能就是取决于扫描的范围。范围越大,速度当然越慢。
我们先假设我们有一堆如下的数据:
RowId EmpId Lastname Firstname Salary
001 10 Smith Joe 40000
002 12 Jones Mary 50000
003 11 Johnson Cathy 44000
004 22 Jones Bob 55000
行式储存模型好现在我们开始让磁盘里塞,假设我们的磁盘块只能容下5个字段(抽象的,假设我们的这些字段的大小都一样),因为我们是按找行优先的,所以结果就如下:
这里写图片描述于是当我们要找Jones的所有信息的工资时候,我们会依次从第一块磁盘块直到扫描到最后(为什么要扫到最后,因为是在找全部叫Jones的信息,所以不扫都最后都不能确定是否会遗漏)。一共需要扫4块,然后取出其第二块和第四块信息,找出其工资的信息。
其实基于行式储存,对于where语句处理都需要处理全表。对于磁盘的不停seek,速度就可想而知。当然一般数据库为了应对这种全数据扫描,找到了建立索引的方法。而索引就是对某个或者某些字段的组合的信息,即取出数据的部分信息,以减少每次扫描从全表到部分信息的扫描的过渡。
这种查询方式很适合于一次取出一个行数据,而对于日常应用系统来说这种方式是非常合适的,因为我们设计应用的时候都是针对一个事务,而我们会把一个事务所有属性存储成一行,使用的时候也是有很大的概率涉及到整行的信息,很利于做缓存。还比如我们经常使用的那些经典sql 语句:
select * from user where id = 1001; select id, user_name, email, address, gender, ... from user where id = 1001; 1 2
!!还敢不敢列出些更多的字段!!
列式储存模型而列储存就是下图这种按列优先储存。为了方便我们每块只储存了一个一列,没有存满。
这里写图片描述
这下我们再考虑上面的查找所有Jones的工资,这下我们只扫描第三个磁盘块,找出Jones都再那些行,然后根据查出来的行号,直接去第五块磁盘(这块对应的式salary列)找出第二、四行的数据,然后输出。一共2次seek。大大小于row-oriented的4次。这种查询方式的前提就是你就需要这列数据就行了,其前提假设就是查询基本不会使用这个行的其他列数据。显然这种假设对于日常操作系统的围绕着一个主题进行的活动是不合适旳。但是却在分析型数据大显身手。
列式的另一大优势是压缩。因为列的天然凝聚性(比如上面的两个Jones就可以压缩成一个)大大强与行,所以列式储存可以有很高的压缩比,这个进一步使使用的磁盘的数量减少,因为使用的磁盘块少,进一步减少了需要扫描的次数。这方面很利于加快查找速度,但是因为解压缩也是耗时耗内存的过程,所以压缩的控制也是需要一个定平衡点。
优劣总结从上面的例子可以明显看出列式数据库在分析需求(获取特点——每次查询几个维度,通常是)时候,不仅搜索时间效率占优势,其空间效率也是很明显的。特别是针对动辄按T计算的数据量来说,在分布式环境中能进行压缩处理能节省宝贵的内部带宽,从而提高整个计算任务性能。
更多相关内容 -
数组、列向量和行向量区别
2019-04-07 11:01:15在机器学习和深度学习的编程过程中,为了提高程序的运行速度,通常将模型表达式转换为向量表达式(向量化),即利用矩阵运算思想提高运行效率。那么,在Python中究竟如何利用Numpy库定义一个向量,以及如何判断否为...Numpy库学习——向量表示
在机器学习和深度学习的编程过程中,为了提高程序的运行速度,通常将模型表达式转换为向量表达式(向量化),即利用矩阵运算思想提高运行效率。那么,在Python中究竟如何利用Numpy库定义一个向量,以及如何判断否为向量呢?
(一)Python中向量的特征
通常情况下,Python中向量和数组之间界限比较模糊,很多时候是通用的,但是在有时候数组不一定能够表示向量,比如,利用Numpy中random模块中的randn函数生成的一维数组,既不是行向量,也不是列向量,而是秩为1的数组:
上述秩为1的一维数组仅有一个方括号,而实际中向量或者矩阵有两层方括号(即属于二维数组),下面给出列向量、行向量和矩阵的示例。
- 列向量
-行向量
-矩阵
综上可知,可以以方括号的形式判断数组是否能够代表一个向量或者矩阵,又或者通过转置看前后是否变化来判断。
(二)Python中向量的构建
在实际编程中,可以采用如下方式构建向量或者矩阵,即
(1)reshape()函数
通过reshape()函数可以依据数组创建指定维度的向量或者矩阵,比如可以针对秩为1的数组创建列向量或者行向量或者矩阵,即由一维数组转化成二维数组,如下所示
注:reshape()函数可以创建指定形状的新数组,但是不会改变原数组的形状,如
(2)直接在构建数组时,利用数组函数指定行列数
可以利用zeros(),ones(),randn()等函数构建指定形状的数组、向量、矩阵,例如
注:np.zeros(数值)构建的一维数组秩为1,不能代表向量,如
-
请问c# 的winform 怎么获取 datagridview选中的行数和列数啊
2021-02-27 10:57:04展开全部获取62616964757a686964616fe59b9ee7ad9431333431373332总行数:dataGridView1.Rows.Count;获取当前选中行索引:int i = this.dataGridView1.CurrentRow.Index;获取当前选中列索引:int j = this....展开全部
获取62616964757a686964616fe59b9ee7ad9431333431373332总行数:dataGridView1.Rows.Count;
获取当前选中行索引:int i = this.dataGridView1.CurrentRow.Index;
获取当前选中列索引:int j = this.dataGridView1.CurrentCell.ColumnIndex;
DataGridView的几个基本操作:
1、获得某个(指定的)单元格的值:
dataGridView1.Row[i].Cells[j].Value;
2、获得当前选中行的索引:
dataGridView1.CurrentRow.Index;
3、获得当前选中单元格的值:
dataGridView1.CurrentCell.Value;
扩展资料
通过DataGridView控件,可以显示和编辑表格式的数据,而这些数据可以取自多种不同类型的数据源。
DataGridView控件具有很高的的可配置性和可扩展性,提供了大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。当你需要在WinForm应用程序中显示表格式数据时,可以优先考虑DataGridView(相比于DataGrid等其它控件)。
如果要在小型网格中显示只读数据,或者允许用户编辑数以百万计的记录,DataGridView将提供一个易于编程和良好性能的解决方案。
DataGridView 用来替换先前版本中的DataGrid,拥有较DataGrid更多的功能;但DataGrid仍然得到保留,以备向后兼容和将来使用。如果要在两者中选择,可以参考下面给出的DataGrid 和DataGridView之间区别的细节信息。
参考资料来源:
-
CSS3 多列布局的 column-width 和 column-count 属性
2018-02-24 22:04:26列间隙和边框多列布局之后,通过 column-gap属性和 column-rule属性来设置相邻两列之间的间隙及边框的样式,column-rule 会出现在列间隙的中间位置,column-gap 和 column-rule 的高度等于列的高度。column-...在CSS3之前,要让Web页面像报纸、杂志的排版一样,呈现多列布局,你必须将内容拆分到不同的标签中,然后分别设定样式,或者使用浮动和绝对定位,或者使用JS脚本等,并且实现起来也很困难。
CSS3新增了多列布局特性,彻底改变了这样的局面,这种新语法能够让页面内容轻松地分布到多列网格中,实现类似报纸、杂志一样的排版效果,而无需任何额外的标签。
多列布局相关的核心属性包括列宽和列数、列间隙和边框、分列符、跨列、填充列等,下面分别进行介绍。
列宽和列数
在多列布局中,可以通过 columns属性设定列的具体宽度或列的数目,使内容分布到多列网格中,用来实现多列布局的效果。语法格式为:
columns:[column-width ] || [ column-count ]
也就是说,columns属性可以分解为 column-width 和 column-count 这 2 个独立的属性,下面分别进行介绍。
column-width
如果想使用固定宽度的列,就可以使用 column-width属性来设置每列的列宽,取值为 <length> | auto,默认为 auto。auto 表示元素多列的列宽将由其它属性(如,column-count属性)决定;<length>表示使用长度值来设置元素的最佳列宽,不允许负值。
假设有一个 div 容器,容器中包含一些内容。HTML代码如下:
<div>
<p>在CSS3之前,要…实现起来也很困难。</p>
<p>CSS3多列布局的出现,彻底改变…分布到多列网格中。</p>
</div>
接下来的多列布局实例,都将使用上述结构。为了方便查看效果,为容器设置固定宽度,并添加了 1px 的浅黑色边框:
div {
width: 450px;
border: 1px solid #444;
}
如果将 column-width属性设置为固定的长度值,则在内容的宽度超过该值时,浏览器就会自动以多列进行布局。目前为止,还没有任何浏览器支持多列布局相关的属性,需要使用浏览器私有属性(下同)。如:
div {
…
-webkit-column-width: 10em;
}
按照上述设定,容器中的内容将会分布在宽度为 10em 的列中。并且,在窗口尺寸发生变化的过程中,浏览器会自动根据列框,来调整列的数目。运行结果如图 9‑1 所示:
图9-1 column-width属性效果
然而,根据W3C标准,column-width属性值实际上是给浏览器建议的最佳宽度,实际的列宽可以根据容器空间的大小进行调整。调整规则如下:
1)当容器可用空间足够大时,实际的列宽可能大于所设置的列宽。如:
div {
…
-webkit-column-width: 300px;
}
上述代码中,容器的宽度是 450px,而设置的列宽是 300px。此时,内容将自动填满整个容器的宽度,实际的列宽将是 450px,而不是 300px。运行结果如图 9‑2 所示:
图9-2 容器宽度大于列宽
从上图可以看出,虽然容器可用空间足够大,但还是无法按两列进行布局,所以就会把列宽扩展到容器的宽度,整个容器就只有一列,而不是多列。
2)当容器的宽度小于设置的列宽时,将以容器的宽度作为列宽。如:
div {
width: 200px;
-webkit-column-width: 300px;
}
上述代码中,容器的宽度是200px,而设置的列宽是300px。此时,实际的列宽将是容器的宽度 200px。运行结果如图 9‑3 所示:
图9-3 容器宽度小于列宽
从上图可以看出,虽然设置的列宽大于元素容器的宽度,但并不会让元素内容按列的宽度进行布局,它只能把列宽压缩到容器的宽度。
column-count
如果希望列的数目保持不变,而让浏览器根据窗口的尺寸自动调整列宽,就可以使用 column-count属性来设置列数,取值为 <integer> | auto,默认为 auto。auto 表示列数由浏览器自动计算;integer 表示建议的最佳列数,取值为大于 0 的整数。如果同时指定了列数和列宽,则 column-count 表示最大列数。如:
div {
…
-webkit-column-count: 3;
}
在多列容器中,浏览器会自动按照指定的列数,一列一列进行填充。上述代码表示,按 3列将内容填充到容器中,运行结果如图 9‑4 所示:
图9-4 column-count属性效果
从上图可以看出,给多列容器指定列数后,在窗口尺寸发生变化时,浏览器会根据列数和容器宽度,自动计算出每列的宽度,以保证按照 3 列进行布局。
-
hadoop之传统的行存储和(HBase)列存储的区别
2018-06-18 15:06:24转自:https://blog.csdn.net/youzhouliu/article/details/676328821 为什么要按列存储列式存储(Columnar or ...简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了):Ø Row-based storage stores ata... -
传统的行存储和(HBase)列存储的区别
2017-03-28 10:42:341 为什么要按列存储 列式存储(Columnar or column-...简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了): Ø Row-based storage stores atable in a sequence of rows. Ø Column-based storag -
MySQL 高级--优化 —— 复合索引(多列索引、联合索引)的定义、区别、创建和理解
2018-11-21 16:01:52文章目录 1、多列索引的定义与区别 2、创建多列索引的语法 4、多列索引的理解 4、通过示例加强理解: 6、存储过程 :快速生成 100W 测试数据 7、MySQL 存储引擎 8、适合建索引情况: 9、不适合建索引情况: 1、多列... -
Python:区分行和列向量
2020-12-11 11:10:18至于1D阵列而言,有的行向量和列向量之间没有区别。他们完全一样。请看下面的例子,在这里我们得到了相同的结果,在所有情况下,这是不是在真正的线性代数(的理论意义):In [37]: wOut[37]: array([0, 1, 2, 3, 4])... -
oracle表中列的类型。number和integer区别
2018-08-21 08:59:14在Oracle 9i中,可以以字符而不是字节为单位表示NCHAR和NVARCHAR2列的长度。 4.LONG long数据类型可以存放2GB的字符数据,它是从早期版本中继承下来的。现在如果存储大容量的数据,Oracle推荐使用CLOB和NCLOB... -
列式存储和行式存储的真正区别
2019-05-04 11:07:421 列式存储和行式存储的真正区别 参考文献: 列式存储和行式存储的真正区别_过往记忆大数据_公众号文章 一般原因:查询需要的字段时,Column-Store 只需读取需要的列,Row-Store读一条记录会把 所有字段都读出来。... -
从pandas datafram中的列中提取字符串中的数字
2021-01-15 01:34:09只要字符串Incorrect_Price保持您在示例中呈现的结构(数字不是用文字表示的),任务就可以相对容易地...两个主要的区别是,你要找的是数值和“美分”或“美元”对,而且它们可能不止一次出现。在import redef extrac... -
列式存储和行式存储的区别
2016-06-28 20:50:281 为什么要按列存储 列式存储(Columnar or column-...简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了): Ø Row-based storage stores atable in a sequence of rows. Ø Column-based storag -
行式存储和列式存储优缺点和paruqet文件结构
2020-06-11 17:59:45参考文章:行式存储和列式存储优缺点和paruqet文件结构 一、列式存储和行式存储的比较 列式存储和行式存储是针对数据在存储介质中的排序形式而言的,假设存在一张table,那么: 行式存储:依次连续存储第1、2、3... -
HbaseRowkey设计以及列族和列的关系
2019-02-12 15:43:36Hbase上Regionserver的内存分为两个部分,一部分作为Memstore,主要用来写;另外一部分作为BlockCache,主要用于读数据;这里主要介绍写数据的部分,即Memstore。当RegionServer(RS)收到写...根据其列族的不同,将... -
MySQL 中NULL和空值的区别?
2019-07-03 12:04:57作为后台开发,在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中的NULL和空值。那你知道它们有什么区别吗? 学不动了,也不想知道它们有什么区别。大兄弟,不行啊,要面试! 前些天我的好朋友小木... -
列向量和行向量看待矩阵乘法
2017-07-24 19:19:14结合上图,我们可以知道,结果矩阵C中的第 j 列完全可以表示为矩阵A中列向量的线性组合,具体怎样的线性组合完全是参看矩阵B中相应的第 j 列,与矩阵B中的其他列无关。换言之,左侧矩阵提供基本的列向量,右侧的矩阵... -
相关分析与列联分析
2019-08-22 09:31:53一、相关分析 ...(两个变量间线性关系的方向和强度) (1)按变量的多少划分: ①单相关 ②复相关 (2)按表现形态划分: ①直线相关 ②曲线相关 (3)从变动的方向划分: ①正相关 ②负相关 (4)按相关... -
初等行变换与初等列变换
2020-02-23 15:22:19初等行变换: 交换两行 以数k≠0乘以某行中的所有元 某一行所有元的k倍加到另一行对应的元上去 初等列变换: ...如果矩阵A经过有限次初等列变换变成矩阵B,就称矩阵A与B列等价。 如果矩阵A经过有限... -
python取第一列
2020-11-30 11:08:15广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的... 因为地图瓦片就是按照层级、行、列规则组织的一张张图片(如下图,14是瓦片的级别,13478是行号,6202是列号),所以想到可以试... -
MySQL 中NULL和空值的区别,索引列是否可空值或null
2021-01-19 12:46:51MySQL 中NULL和空值的区别,索引列是否可空值或null发布时间:2018-07-25 18:02,浏览次数:298, 标签:MySQLNULL在创建表的时候尽量把字段的默认值设置成 notnull,除非你想存储null;因为在mysql中为null的的字段... -
matlab 给某一列乘上一个系数
2021-04-21 07:59:41矩阵M是一个 mxn 的矩阵,现在要给M矩阵的第一列都要乘上10,使其第一列扩大10倍,那... // 正确写法这里要明白矩阵乘积与矩阵点乘(对应位相乘)的区别矩阵乘法要求左矩阵的行数与右矩阵的列数相等,即MxN维矩阵乘以N... -
hbase 列族 版本数,TTL和二级索引
2018-06-11 17:27:28版本数量最大版本数量通过HColumnDescriptor为每个列族配置要存储的最大行数版本。为最大版本默认值为1。这是因为在所描述的一个重要参数,数据模型部分的HBase也没有覆盖行的值,但每行而存储不同的值按时间(和... -
TableLayout 和 GridLayout 的区别
2018-08-18 23:52:30TableLayout 和 GridLayout 的区别 TableLayout 和 GridLayout 的区别 一. TableLayout 二. GridLayout 2.1 隔行/列的效果 ...三....一....通过添加 TableRow / 其他组件 来控制表格的行数和列数 单... -
pandas的dataframe的取数操作(按行按列取特定位置的数)有条件的筛选取数
2020-05-12 16:34:01取某一行 取列 同时取行和列 使用 df.loc[(取的行),(取的列)] -
Shell脚本,awk编程语言,awk科普,awk语法,风格,awk的print功能,列数$num
2022-02-02 19:01:55Shell脚本,awk编程语言,awk科普,awk特点和作用 O、介绍awk 1、基于模式匹配检查输入文本,逐行处理并输出 ...3、awk用于对指定文件的数据进行分列,区别与以行作为数据单位,awk可以将内容按照规则分列,并对逐列的 -
python – 如何添加列到numpy数组
2020-12-11 00:49:37我认为你的问题是,你期待np.append添加列在原地,但它做了什么,因为如何存储数字数据,是创建一个连接的数组的副本Returns-------append : ndarrayA copy of `arr` with `values` appended to `axis`. Note that `... -
linux中ll和ls的区别
2021-05-16 06:52:22所以"ll"和“ls -l”的功能是相同的。2.ll 列出来的结果详细,有时间,是否可读写等信息,像windows里的 详细信息;ls 只列出文件名或目录名 就像windows里的 列表。扩展资料:查看ll的alias别名为例:1.输... -
MySQL中count是怎样执行的?———count(1),count(id),count(非索引列),count(二级索引列)的分析
2021-10-19 18:34:02MySQL中count是怎样执行的?———count(1),count(id),count(非索引列),count(二级索引列)的分析