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

HBase的表结构你设计得不对!

4、每个列簇(column family)有多少列(column)? 5、列名应该是什么?尽管列名不需要在表创建中定义时,但在编写或读取数据时需要了解它们。...4、原子性操作只在一行(row)上得到保证。没有跨行原子性保证,这意味着没有多行事务。 5、列簇必须在创建表之前定义。 6、列限定符(column qualifiers)是动态的,可以在写入时定义。...在这种情况下,单元格只包含一些任意小的值,且没有任何意义。 ?...短列簇名只是通过减少需要从HBase读取/写入的数据来减少I / O负载(磁盘和网络),列簇名称是返回给客户端的每个KeyValue 对象的一部分。第一点在这里更重要。...由于您始终知道要查询的用户,因此可以使用用户ID生成的哈希值去查询数据表。具有哈希值的表将如图8所示。 ? 图8:使用MD5作为row key的一部分来实现固定长度。

1.5K10

设计HBase RowKey需要注意的二三事

控制RowKey长度 在HBase中,RowKey、列族、列名等都是以byte[]形式传输的。 RowKey的最大长度限制为64KB,但在实际应用中最多不会超过100B。...设计短RowKey有以下两方面考虑: 在HBase的底层存储HFile中,RowKey是KeyValue结构中的一个域。...假设RowKey长度100B,那么1000万条数据中,只算RowKey就占用掉将近1G空间,会影响HFile的存储效率。 ?...同样地,列族、列名的命名在保证可读的情况下也应尽量短。HBase官方不推荐使用3个以上列族,因此实际上列族命名几乎都用一个字母,比如‘c’或‘f’。 3....保证RowKey唯一性 这个就是显而易见的了,不再赘述。 举个例子 我们的业务中,有一部分是用户在日历上记录自己的行为。

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

    Mysql命名规范

    ,长度不要超过 32 字符 说明:tmp,wushan 谁知道这些库是干嘛的 禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。...`,能够减少碎片,查询性能高 2)字段长度相差较大,或者更新较少的业务场景,适合使用 `varchar`,能够减少空间 复制代码 varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000...说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为 20 的索引,区分度会高达 90% 以上,可以使用 count(distinct left(列名, 索引长度))/count(*) 的区分度来确定...order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现 file_sort 的情况,影响查询性能。 正例:`where a=? and b=?...说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:`where a>? and b=?` 那么即使 a 的区分度更高,也必须把 b 放在索引的最前列。

    8K21

    mysql(基本的SELECT语句)

    选择特定的列: SELECT department_id, location_id #列名,属性 FROM   departments; #表名 列的别名 SELECT...DISTINCT 其实是对后面所有列名的组合进行去重,你能看到最后的结果是 74 条,因为这 74 个部门id不同,都有 salary 这个属性值。...一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。  着重号 我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。...SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。...Key:表示该列是否已编制索引。 PRI表示该列是表主键的一部分; UNI表示该列是UNIQUE索引的一部分; MUL表示在列中某个给定值允许出现多次。

    1.7K30

    MySQL学习笔记-基础介绍

    语法格式: //‘表名1’表示将获取到的记录查到哪个表中,‘表名2’表示从哪个表中查询记录 //‘列名列表1’表示为哪些列赋值,不设置表示所有列,‘列名列表2’表示从表中查询到哪些列的数据 insert...(5)表管理程序不记录最后被使用的 auto_increment值,但是会从头开始计数。即使对应MyISAM 和 innoDB 也是如此。MyISAM 和 innoDB 通常不再次使用序列值。...,Students.Cource; 6.3.2 内连接查询 内连接是最普通的连接类型,而且是最匀称的,因为它们要求构成连接的每一部分与每个表匹配,不匹配的行将被排除在最后的结果集之外。...语法格式: //列名列表:可以来自不同的表 //左连接,join左边的表是主表,右连接,join右边的表是主表 //以某一个表为主表,进行关联查询,不管能不能关联上,主表的数据都会保留,关联不上的以null...默认情况下,全文索引的搜索执行方式不区分大小写,如果全文索引所关联的字段为二进制数据类型,则以区分大小写的搜索方式执行。 4、单列索引,在表的单个字段上创建索引。单列索引只根据该字段进行索引。

    30710

    如何在SQL中添加数据:一个初学者指南

    本文旨在为SQL新手提供一个清晰的指南,解释如何在SQL(Structured Query Language)中添加数据,包括基本的INSERT语句使用,以及一些实用的技巧和最佳实践。...理解SQL和数据库 在深入了解如何添加数据之前,重要的是要理解SQL是一种用于管理关系数据库系统的标准编程语言。它用于执行各种数据库操作,如查询、更新、管理和添加数据。....); 这里,你需要替换表名和列名为你的实际表名和列名,值1, 值2, 值3等为你想要插入的相应数据值。...如果表中的某些列设置了默认值或允许NULL值,你可以选择只插入特定的列: INSERT INTO Employees (FirstName, LastName) VALUES ('John', 'Doe...'); 在这个例子中,只有FirstName和LastName列被指定值,EmployeeID将依赖于表的定义来自动生成或保留为NULL(如果允许)。

    40610

    《SQL开发样式指南》,让你的SQL代码更加规范

    Naming conventions 命名惯例 General 一般原则 保证名字独一无二且不是保留字。 保证名字长度不超过30个字节。 名字要以字母开头,不能以下划线结尾。...Tables 表名 用集群名称,或在不那么理想的情况下,复数形式。如staff和employees。 不要使用类似tbl或其他的描述性的前缀或匈牙利命名法。 表不应该同它的列同名,反之亦然。...避免直接使用id做表的主标识符。 避免列名同表名同名,反之亦然。 总是使用小写字母,除非是特殊情况,如专有名词。..._addr 地址,有形的或无形的,如ip_addr Query syntax 查询语句 Reserved words 保留字 保留字总是大写,如SELECT和WHERE。...约束的定义应该紧跟它相应的列的定义后。 如果该约束与多个列相关,那么让它尽量离与其相关的列距离越近越好。实在不行就讲它放在表定义的最后。

    36110

    MySQL入门,问题不大【增删改查极速上手】

    TABLE 表名( 列名1> [列级完整约束条件>], [列名2> [列级完整约束条件>],...], [] );...SQL 中,这个域的概念,用数据类型来实现,就比如,我们定义的这一列数据都只能是 8个单位长度以内的字符串 下面列了几种常见的数据类型 数据类型 含义 CHAR(n) 长度为 n 的定长字符串 VARCHAR...(n) 最长度为 n 的边长字符串 INT 或 INTERGER 长整数 SMALLINT 短整数 DOUBLE(6,3) 双精度浮点数,代表共保留6位数字,小数点后保留3位(也可不设置直接使用) FLOAT...② 约束条件 约束,就是针对属性值的一些约束条件,只针对某一列,叫做列级约束、针对多列属性的约束,叫做表级约束,怎么理解呢?...,自己写 SQL 的时候大部分情况都是直接写出所有字段的,并不会向上面一样,只写出某几项,因为我们不确定每次用户需要修改的数据是哪几项,最后执行的效果可以模拟为: UPDATE student SET

    76630

    mysql基础知识(4)

    位 bit:存储的是二进制值,可指定存储的位数,如果不指定默认为1。...如果最左边的列没有被包含在查询条件中,则MySQL将不会使用该复合索引 例如:有一个复合索引包含3个字段(A、B、C) 如果只包含了A列,则索引可能被使用 如果包含了A、B列,则索引可以较为高效的使用。...如果包含了A、B、C列,则索引可以完全使用。 如果只包含了B、C或A、C列,则不符合最左匹配原则,索引失效。...SQL语法: 常见的聚合函数 sum(列名) 求和      max(列名) 最大值      min(列名) 最小值      avg(列名) 平均值      count(列名) 统计记录数...如果不指定条件,将删除表中的所有行,但表的结构和约束仍然保留。

    8810

    【重学MySQL】十三、基本的 select 语句

    基本的列别名使用 在SELECT语句中,你可以通过在列名后紧跟AS关键字和别名来指定列的别名。...DISTINCT通常与SELECT语句一起使用,放在需要返回唯一值的列名之前。你也可以对多个列使用DISTINCT,但这意味着MySQL会考虑这些列的组合作为唯一性的判断依据。...着重号 在MySQL中,“着重号”(通常指的是反引号`)主要用于标识符(如数据库名、表名、列名等)的引用,特别是在这些标识符是MySQL的保留字或者包含特殊字符(如空格、连字符等)时。...避免保留字冲突:如果你的表名或列名与MySQL的保留字相同,使用反引号可以避免语法错误。...SQL是大小写不敏感的,但出于可读性和一致性考虑,推荐使用特定的命名约定(如关键字大写,表名和列名小写)。

    17610

    【值得收藏】一份非常完整的Mysql规范

    ,表名不使用复数名词,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列...即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)Innodb 支持事务,支持行级锁...【大数据量要考虑,省一点是一点】 方法: 1)将字符串转换成数字类型存储,如:将IP地址转换成整形数据。...区分度最高的放在联合索引的最左侧(区分度=列中不同值的数量/列的总行数); 尽量把字段长度小的列放在联合索引的最左侧(因为字段长度越小,一页能存储的数据量越大,IO性能也就越好); 使用最频繁的列放到联合索引的左侧...如a like ‘%123%’,(如果无前置%,只有后置%,是可以用到列上的索引的) 一个SQL只能利用到复合索引中的一列进行范围查询 如:有 a,b,c列的联合索引,在查询条件中有a列的范围查询,则在

    46720

    【mysql】基本的select语句

    作用:重命名一个列 ;便于计算 紧跟列名,也可以在列名和别名之间加入关键字AS,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。...DISTINCT 其实是对后面所有列名的组合进行去重,你能看到最后的结果是 74 条,因为这 74 个部门id不同,都有 salary 这个属性值。...一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。4....PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。 Default:表示该列是否有默认值,如果有,那么值是多少。...在Windows下大小写不敏感,不区分大小写的,如上的字符串 'King' 也是可以任意大小写的 8.

    1.5K30

    转载数据仓库建设规范2 数据库对象命名规范3   主机目录及文件命名规范4   数据保存周期规范5   数据库编程规范6   JAVA编码规范7   shell编码规范8   完整的规范文档结构

    固定长度的字符串类型采用char,长度不固定的字符串采用varchar,一定要避免长度不固定的情况下采用char。...确保变量和参数在类型和长度与表数据列类型和长度相匹配。 5.3 注释规范 一般情况下,源程序有效注释量不低于30%以上。...说明:采用基本数据类型,各种数据库均支持,减少不同版本的维护。设计数据类型和长度时要考虑应用编程开发的方便以及后续可维护性。...l对于特别复杂的sql(特别是多层嵌套,带字句或相关的查询),应先考虑是否设计不当引起,对复杂的sql可以通过程序实现,原则上遵循一句话只做一件事情,避免多重嵌套SQL的使用。...全量替换的数据表(如维表、临时表)可以不建立分区。 日分区表禁止保留月底最后一天数据,如果要用到月底最后一天数据,需要单独建立月表保存。

    1K21

    .NETC# 程序如何在控制台终端中以字符表格的形式输出数据

    不过要在合适的位置输出合适的制表符,要写一些打杂式的代码了;另外,如果还要考虑表格列的宽度自适应,再考虑中英文在控制台中的对齐,还要考虑文字超出单元格时是裁剪/省略/换行。... 用于定义表格的列 ConsoleStringExtensions 由于在控制台中做中英文对齐不能使用 string 原有的与长度相关的方法,所以我们需要一个静态类来扩展 string 对控制台的特殊处理...其中,ConsoleStringExtensions 类的设计,我参考了 D 的个人博客,不过原文的一部分关键实现其实是不正确的,有一些本不必要的循环浪费性能,还有不能直观看出含义的缩写命名,所以这个类的实际代码是我完全重写之后... 的实例,为了方便,我允许隐式从元组转换 整数列宽的元组,定义的是这一列可用的字符数 小数列的元组,是将整数列宽和表格划线用的字符除外后,剩余总列宽的百分比 元组的第二项是表头中的列名...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    49730

    基本的SELECT语句与显示表结构

    在生产环境下,不推荐直接使用SELECT * 进行查询。...选择特定的列: SELECT department_id, location_id FROM departments; MySQL中的SQL语句是不区分大小写的,因此SELECT和select的作用是相同的...紧跟列名,也可以在列名和别名之间加入关键字AS,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。建议别名简短,AS 可以省略。...一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。 着重号 我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。...PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。 Default:表示该列是否有默认值,如果有,那么值是多少。

    1.5K50

    HBase Schema 设计

    如 BigTable 原始论文所述,它是一个稀疏,分布式,持久的多维有序 Map,由行键,列以及时间戳进行索引。...如果我们只关注指定单元,则需要将对应的列族和列限定符作为主键的一部分。 2. HBase表设计基础 正如上面强调的那样,HBase 数据模型与关系数据库系统完全不同。...2.1 方案一 下面我们开始考虑表的,并探讨其优缺点。如下图所示的表设计,该表每一行代表着某个用户以及他所关注的所有用户,行键是关注者的用户ID,列名为关注用户序号,单元值为关注用户Id: ?...并且当添加新的关注用户时,因为不知道给这个新用户分配什么样的列序号,因此需要遍历列族中的所有列找出最后一个列,并将最后一列的序号+1给新的关注用户作为列序号,这样的代价会很大。...如果我们要要查询某个用户,我们可以计算对应的散列值来查询表: ? 使用MD5作为行键的一部分可以得到固定长度和更好的分布。 3. 总结 本文介绍了HBase模式设计的基础知识。

    2.3K10

    利用mybatis-generator自动生成代码

    注意,classPathEntry只在下面这两种情况下才有效​ 当加载 JDBC 驱动内省数据库时 当加载根类中的 JavaModelGenerator 检查重写的方法时 ​因此,​如果你需要加载其他用途的...该属性的作用可以查看扩展MyBatis Generator 一般情况下,我们使用如下的配置即可: 如果你希望不生成和​​...默认情况下的转换规则为: 如果​​精度>0​​​或者​​长度>18​​​,就会使用​​java.math.BigDecimal​​ 如果​​精度=0​​​并且​​10长度列的名称中包含空格,MGB会自动添加**分隔符**, 所以这个重写只有当列名需要强制为一个合适的名字或者列名是数据库中的保留字时是必要的。...该元素可以用来屏蔽不需要生成的列。 该元素有一个必选属性: ​​column​​:要忽略的列名。

    43220

    MySQL行格式原理深度解析

    MySQL中的行格式(Row Format)是指存储在数据库表中的数据的物理格式。它决定了数据是如何在磁盘上存储的,以及如何在查询时被读取和解析的。...在InnoDB的Dynamic行格式下,处理变长数据类型(如VARCHAR、TEXT和BLOB)的需要存储额外的信息来追踪实际数据的长度,因为这些字段中存储的数据字节数是不固定的: 1....在Dynamic行格式中,如果VARCHAR字段的实际长度加上长度前缀超过了页内存储的限制,那么该字段的值会被存储在页外,而在页内只保留一个20字节的指针。 3....其他列的空间占用:如果表中除了这个 VARCHAR 列之外还有其他列,那么这些列也会占用行的一部分空间,从而减少可用于 VARCHAR 列的空间。...二进制位的排列是逆序的,这意味着表中的第一列(如果它允许NULL值)将对应于列表中的最后一个二进制位,而最后一列将对应于第一个二进制位。

    70310

    如何漂亮打印Pandas DataFrames 和 Series

    默认情况下,当打印出DataFrame且具有相当多的列时,仅列的子集显示到标准输出。显示的列甚至可以多行打印出来。...仅显示一部分列(缺少第4列和第5列),而其余列以多行方式打印。 ? 尽管输出仍可读取,但绝对不建议保留列或将其打印在多行中。...如何在同一行打印所有列 现在,为了显示所有的列(如果你的显示器能够适合他们),并在短短一行所有你需要做的是设置显示选项expand_frame_repr为False: pd.set_option('expand_frame_repr...display.expand_frame_repr 默认值:True 是否跨多行打印宽数据的完整DataFrame ,可以考虑使用max_columns,但是如果宽度超过display.width,...display.max_colwidth:这是显示列名的最大字符数。如果某个列名溢出,则将添加一个占位符(…)。

    2.5K30

    mysql知识初篇(一)

    (20)如果你存放 'abc'字串,实际在表中存在形式‘abc’ 建 议: 如果表的某列长度固定,比如 产品编号,学号,而且 在255内,我们应当使用char,如果长度不能取得,或者长度大于...(3)text 该类型,可以表示更大的字串、 (4)日期类型: 1. date (日期:年-月-日) 对于date只保留...-------- 建议: 如果不知道该不该用timestamp,就不要用 *修改新的列 alter table 表名 add 列名 数据类型 ----修改列(列的类型和大小...) alter table 表名 modify 列名 新的数据类型 ----删除某列 alter table 表名 drop 列名 0....在上面的员工表的基本上增加一个image列 1. 修改job列,使其长度为60 2. 删除sex列 3. 表名改为user 4.

    1.5K70
    领券