首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MongoDB范围片键和哈希片键

// MongoDB范围片键和哈希片键 // 01 片键 MongoDB的片键决定了集合中存储的数据在集合中的分布情况,具体的方法是使用片键值的范围来对集合中的数据进行分区。...举个例子: 假如我们以年龄age来作为片键,那么age的范围理论上是0~80,此时,MongoDB会为我们定义age的四个范围区间,他们分别是:0~20,20~40,40~60,60~80,每个范围都是一个...通常情况下,我们给字段添加的索引,最常见的是普通索引或者哈希索引, 普通的索引字段如果作为片键,那么这个片键我们称为范围片键; 哈希索引字段如果作为片键,那么这个片键我们称为哈希片键。...下面我们来看二者的不同之处: 02 范围片键(递增片键) 范围片键,顾名思义,就是将数据根据片键划分到连续的范围里面,在这个模型中,那些值"相似"的文档可能位于同一个片中。例如下面这样: ?...在下列场景中,使用范围片键比较合适: 1、数据的基数比较大 2、分片的写入频率比较低(插入较少不容易产生chunk的搬运) 3、非单调变化的分片(如果单调写,则会分到同一个块里面,容易达到chunk割裂的条件

1.3K10

传统的行存储和(HBase)列存储的区别「建议收藏」

1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。...下面来看一个例子: 从上图可以很清楚地看到,行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了。...所以它们就有了如下这些优缺点: 行式存储 列式存储 优点 Ø 数据被保存在一起 Ø INSERT/UPDATE容易 Ø 查询时只有涉及到的列会被读取 Ø 投影(projection)很高效...Selection)时即使只涉及某几列,所有数据也都会被读取 Ø 选择完成时,被选择的列要重新组装 Ø INSERT/UPDATE比较麻烦 注:关系型数据库理论回顾 – 选择(Selection)和投影...正因为每个字符串在字典表里只出现一次了,所以达到了压缩的目的(有点像规范化和非规范化Normalize和Denomalize) 3查询执行性能 下面就是最牛的图了,通过一条查询的执行过程说明列式存储

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spring JDBC-自增键和行集RowSet

    概述 自增键的使用 Oracle以序列方式产生主键值 MySQL以表方式产生主键值 如何规划主键方案 自增键小结 以行集返回数据 示例 示例源码 概述 Spring JDBC提供了对自增键及行集的支持...,自增键对象让用户可以不依赖数据库的自增键,在应用层为新纪录提供主键。...---- 下面分别以Oracle和MySQL为例子,分别阐述下使用序列以及字段产生主键值的方式。...1、数据库层主键方案不足: 其一,它给应用开发带来不便,因为你必须通过一个查询获取新增数据的主键值; 其二,不方便主键值的全局管理和控制,使系统散失灵活性; 其三,不方便数据的整合和迁移。...行集对象还可以先绑定一个数据源,获取数据后就关闭它,这种行集被称为“非连接行集”。 非连接行集可以在断开连接时更改数据,然后重新绑定数据连接,并将对数据的更改同步到数据库中。

    59620

    Phoenix边讲架构边调优

    例如,如果您使用包含组织标识值的列(ID)来引导,则可以轻松选择与特定组织有关的所有行。您可以将HBase行时间戳添加到主键,以通过跳过查询时间范围外的行来提高扫描效率。...你需要手动启动job; 如果数据太大而无法完全扫描表,则使用主键创建底层组合行键,以便返回数据的一个子集或便于跳过扫描。当查询包括时,Phoenix可以直接跳转到匹配键谓词中的键集。...Apache Phoenix可以轻松利用多个cores来提高扫描性能。 对于范围查询,HBase块缓存没有提供太多优势。...7 删除 删除大型数据集时,请在发出DELETE查询之前启用autoCommit,以便客户端在删除所有键时不必记住所有键的行键。...8 解释计划 一个EXPLAIN计划告诉你很多关于如何运行一个查询: 所有将要执行的HBase范围查询 将被扫描的字节数 将要遍历的行数 哪个HBase表将用于每个扫描 在客户端和服务器端执行哪些操作(

    4K80

    FAQ系列之Phoenix

    请记住,在 HBase 中,您不会对可能的 KeyValues 或行键的结构进行建模。这是您在 Phoenix 中指定的超出表和列族的信息。...100M 行的全表扫描通常在 20 秒内完成(中型集群上的窄表)。如果查询包含键列上的过滤器,这个时间会减少到几毫秒。...为什么我的查询不进行范围扫描?...请注意,您可以在“pk2”和“pk3”列上添加二级索引,这将导致对第一个查询(通过索引表)进行范围扫描。 DEGENERATE SCAN 意味着查询不可能返回任何行。...这也意味着除非存储了至少一列,否则根本不存储行键。 现在考虑具有整数主键的 JDBC 行和几个全为空的列。为了能够存储主键,需要存储一个 KeyValue 以表明该行完全存在。

    3.2K30

    HBase数据操作

    # HBase数据操作 put delete 数据查询 get scan 数据统计 # put 语法 put '表名','行键','列族:列限定符','单元格值',时间戳 描述 必须指定表名、行键...只能插入单个数据 描述:如果指定的单元格已经存在,则put操作为更新数据; 单元格会保存指定VERSIONS=>n的多个版本数据 # delete 语法 delete '表名','行键','列族...', 描述:必须指定表名、行键和列族,列限定符和时间戳是可选参数; delete最小删除粒度为单元格,且不能跨列族删除 注意 delete操作并不会马上删除数据,只是将对应的数据打上删除标记...'} 指定输出行数 scan 'student', {LIMIT => 1} 指定输出行键范围 scan 'student', {STARTROW =>'001',ENDROW => '003'} 指定组合条件查询...而在 HBase 里,计算逻辑行需要扫描全表的内容,重复的行键是不纳入计数的,且标记为删除的数据也不纳入计数。

    1.8K30

    HBase常用的Filter总结

    同时对于数据的体量较大(10亿级别以上的数据数据量),检索和修改的场景较多时是比较适合使用hbase。     ...HBase过滤器可以根据分为:列簇与列类型过滤器,行键过滤器,其他过滤器 HBase Filter 概览 查询hbase支持的filter 列表 base(main):001:0> show_filters...Filter 使用简单例子 行键过滤器 RowFilter:针对行键进行过滤  scan 'test',FILTER=>"RowFilter(=,'binaryprefix:row')"    ...  scan 'test',FILTER=>"ColumnRangeFilter('name',true,'music',false)"     说明:ColumnRangeFilter过滤器则可以扫描出符合过滤条件的列范围...scan 方法对单元格进行过滤,但是使用 get 方法时,需要指定行键 SingleColumnValueFilter:在指定的列族和列中进行比较的值过滤器 scan 'test', {FILTER

    1.4K20

    HBase RowKey与索引设计 |「Hbase2.0常见问题性优化小总结续集」

    散列:如果你愿意在行健里放弃时间戳信息(每次你做什么事情都要扫描全表,或者每次要读数据时你都知道精确的键,这些情况下也是可行的),使用原始数据的散列值作为行健是一种可能的解决方案: hash('TheRealMT...salting:当你思考行健的构成时,salting是另一种技巧。让我们考虑之前的时间序列数据例子。假设你在读取时知道时间范围,但不想做全表扫描。...对时间戳做散列运算然后把散列值作为行健的做法需要做全表扫描,这是很低效的,尤其是在你有办法限制扫描范围的时候。使用散列值作为行健在这里不是办法,但是你可以在时间戳前面加上一个随机数前缀。...现在你基于用户ID扫描紧邻的n行就可以找到用户需要的n条最新推帖。这里行健的结构对于读性能很重要。把用户ID放在开头有助于你设置扫描,可以轻松定义起始键。 4....随后的eventId和Date是用来做范围Scan来使用的。

    1.8K20

    使用 HBase - HBase Shell 命令

    查询行数据 HBase 使用 get 命令可以从数据表中获取某一行记录。get 命令必须设置表名和行键名,同时可以选择指定列族名称、列标识、时间戳范围、数据版本等参数。 1....指定行键范围查询 scan 命令可以使用 STARTROW 和 ENDROW 参数,指定输出行键的范围。...而在 HBase 里,计算逻辑行需要扫描全表的内容,重复的行键是不纳入计数的,且被标记为删除的数据也是不纳入计数的。...删除数据 HBase 使用 delete 命令可以从表中删除一个单元格或一个行集,语法与 put 命令类似,必须指定表名、行键和列族名称,而列名和时间戳是可选的。...FirstKeyOnlyFilter FirstKeyOnlyFilter 过滤器只对相同行键的第一个单元格进行过滤和显示,即扫描每行的第一个单元格,找到便停止扫描此行,且结果显示键值对。

    11.1K31

    HBase之比较过滤器

    最近在学习Hadoop中的HBase,通过本次实验,可以理解比较过滤器,能够掌握并运用。主要包含行比较过滤器和列族比较过滤器实验。...行键和行值需要进行区分: 行值(row):在一行数据中,其row值是一行中的唯一标示。...行键(Key):在HBase底层存储中,数据都是以KeyValue对象的形式存在,而在KeyValue对象中,Key包含了一个单元格的row、columnfamily、column、timestamp、...目的 通过代码实现行比较过滤器的调用,这里是匹配“emp”表中行键大于等于“2”、并且扫描范围为列族personal data下面的列city的行,并将相关信息打印到控制台。...查看结果 在控制台查看行过滤的结果,将匹配到的“emp”表格中行键大于等于2的、并且扫描范围为列族personal data下面的列city的行的数据进行显示。如下: ?

    2.1K50

    《NoSQL实战:企业级大数据应用开发入门、实战与进阶》(WIP)

    Apache HBase是一种NoSQL键/值存储系统,它在Hadoop分布式文件系统(HDFS)上运行。...HBase中的每个键/值对被定义为一个单元(cell),每个键含有行键、列族和时间戳。HBase中的行是一组键/值映射,由行键来识别。...HBase可以使用Hadoop的基础设施,并使用现成服务器实现横向扩展。 HBase的工作方式是,将数据存储为键/值。...HBase针对读取操作进行了优化,得到单次写入master的支持,支持因而获得的严格一致性模型,以及使用支持行扫描的顺序分区(Ordered Partitioning)。...HBase很适合执行基于范围的扫描。 线性可扩展性,支持大表和范围扫描--由于顺序分区,HBase很容易横向扩展,同时仍支持行键范围扫描。

    1.2K30

    大数据最佳实践 | HBase客户端

    通过组合使用扫描器缓存和批量大小的方式,可以让用户方便的控制扫描一个范围内的行健时所需要的RPC调用次数。...要计算一次扫描操作的RPC请求的次数,用户需要先计算出行数和每行列数的乘积(至少了解大概情况)。然后用这个值除以批量大小和每行列数中较小的那个值。最后再用除得的结果除以扫描器缓存值。...3)限定扫描范围 当Scan被用来处理大量行时(特别是被用作MapReduce输入源时),注意哪些属性被选中了。...当执行一个表的扫描以获取需要的行键时(没有列族、列名、列值和时间戳),在Scan中用setFilter()方法添加一个带MUST_PASS_ALL操作符的FilterList。...FilterList中包含FirstKeyOnlyFilter和KeyOnlyFilter两个过滤器,使用以上组合的过滤器将会把发现的第一个KeyValue行键(也就是第一列的行键)返回给客户端,这将会最大程度地减少网络传输

    2.7K70

    Rowkey(行键)设计

    本节介绍了 HBase 中的行键(Rowkey)设计。 Hotspotting HBase 中的行按行键按顺序排序。这种设计优化了扫描(scan),允许您将相关的行或彼此靠近的行一起读取。...因此,即使连续输入数据和多种度量类型,Puts也会分布在表中不同的地区。 尽量减少行和列的大小 在 HBase 中,值总是随着坐标而运行;当单元格值通过系统时,它将始终伴随其行,列名称和时间戳。...反向时间戳 反向扫描 API HBASE-4811 实现一个 API,以反向扫描表中的表或区域,从而减少了为正向或反向扫描优化模式的需要。此功能在 HBase 0.98 和更高版本中可用。...由于 HBase 密钥的排序顺序不同,因此该密钥在 [key] 的任何较旧的行键之前排序,因此是第一个。...Rowkeys和ColumnFamilies 行键的范围为 ColumnFamilies。因此,相同的 rowkey 可以存在于没有碰撞的表中存在的每个 ColumnFamily 中。

    71020

    HBase 学习一(基础入门).

    行(Row): 在表里面,每一行代表着一个数据对象,每一行都是以一个行键(Row Key)来进行唯一标识的,行键并没有什么特定的数据类型, 以二进制的字节来存储。...单元(Cell): 每一个行键,列簇和列标识共同组成一个单元,存储在单元里的数据称为单元数据,单元和单元数据也没有特定的数据类型,以二进制字节来存储。...访问 HBase table 中的行,只有三种方式: 通过单个 RowKey 访问。 通过 scan 方式,设置 startRow 和 stopRow 参数进行范围匹配。...全表扫描,即直接扫描整张表中的所有行记录。...HBase 中的每张表都通过行键(RowKey)按照一定的范围被分割成多个子表(HRegion),一个 HRegion 超过一定阈值就要被分割成两个,这个过程由 HRegionServer 管理, 而

    92040

    HBase基本数据操作详解 转

    获取指定行的所有信息,获取指定行和指定列族的所有colunm,获取指定column,获取指定column的几个版本,获取指定column的指定版本等; Scan:获取所有行,获取指定行键范围的行,获取从某行开始的几行...public Put(byte[] row) 参数:row 行键 (2)指定行键和时间戳 public Put(byte[] row, long ts) 参数:row 行键,ts 时间戳 (3)从目标字符串中提取子串...(2)指定要删除的行键和时间戳 Delete(byte[] row, long timestamp) 删除行键和时间戳共同确定行的数据。...} 8.1.常用构造函数 (1)创建扫描所有行的Scan Scan() (2)创建Scan,从指定行开始扫描, Scan(byte[] startRow) 参数:startRow行键 注意:如果指定行不存在...1405417500485 Rowkey : 100003   Familiy:Quilifier : name   Value : leon   Time : 1405417500485   (2)扫描指定行键范围

    96120

    Hbase入门篇02---数据模型和HBase Shell的基本使用

    Hbase入门篇02---数据模型和基本使用 HBase数据模型 在HBASE中,数据存储在具有行和列的表中。...中的行由一个rowkey(行键)和一个或多个列组成,列的值与rowkey、列相关联 行在存储时按行键按字典顺序排序 行键的设计非常重要,尽量让相关的行存储在一起 例如:存储网站域。...可以通过一些参数来指定扫描的范围、过滤条件、返回的列等。 例如: scan 'ORDER_INFO':扫描 ORDER_INFO 表中的所有行。...如果必须要扫描大表,可以考虑使用一些技术手段来降低对磁盘和内存资源的压力,比如设置扫描范围、限制返回的列等,以及使用 MapReduce 等技术来实现分布式扫描。...PrefixFilter rowkey前缀过滤器 KeyOnlyFilter 只对单元格的键进行过滤和显示,不显示值 FirstKeyOnlyFilter 只扫描显示相同键的第一个单元格,其键值对会显示出来

    1.2K30

    HBase Shell命令大全「建议收藏」

    二:HBase重要概念 HBase的表结构 HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族/列簇(column family),每个列族/列簇下面可以有多个普通列。...HBase系统默认定义了两个缺省的namespace: hbase:系统内建表,包含namespace和meta表 default:用户建表时未指定namespace的表都创建在此 行键 Row Key...行键,每一行的主键列,每行的行键要唯一,行键的值为任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在HBase内部,rowKey保存为字节数组byte[]。...的值 get ‘表名’, ‘行键’ get ‘表名’, ‘行键’, ‘列族名’ count 统计表中行的数量 count ‘表名’ incr 增加指定表行或列的值 incr ‘表名’, ‘行键’, ‘...自增incr # 语法 incr '表名', '行键', '列族:列名', 步长值 # 示例 # 注意:incr 可以对不存的行键操作,如果行键已经存在会报错,如果使用put修改了incr的值再使用

    4.6K21
    领券