做网站公司是干什么的,响应式网站优势,橙色营销网站,广东企业黄页网站date: 2020-09-10 13:50:00updated: 2020-09-14 16:30:001. Phoenix索引全局索引#xff1a;适合读多写少的场景。写数据时因为索引表分布在不同数据节点#xff0c;跨节点数据传输带来巨大的性能消耗。全局索引必须是查询语句中所有列都包含在全局索引中#xff0c;它才会生…date: 2020-09-10 13:50:00updated: 2020-09-14 16:30:001. Phoenix索引全局索引适合读多写少的场景。写数据时因为索引表分布在不同数据节点跨节点数据传输带来巨大的性能消耗。全局索引必须是查询语句中所有列都包含在全局索引中它才会生效。create index my_index on my_table (v3);select v1 from my_table where v3 13406157616;此时不会走索引因为检索列不在全局索引中有以下三种方法使它使用索引1. 使用覆盖索引CREATE INDEX cover_index ON my_table(v3) INCLUDE (v1);2. 使用 Hint 强制索引SELECT /* INDEX(my_table my_index) */ v1 FROM my_table WHERE v3 13406157616;3. 使用本地索引CREATE LOCAL INDEX local_index on my_table (v3);本地索引适合读少写多的场景。在本地生成一个索引表。覆盖索引配合全局索引使用避免回表查询。函数索引适合拼接式字符串查询。创建索引的时候有可能因为表的数据量过大导致索引表的数据量过大导致发生超时异常创建出来的索引表不完整此时可以通过异步索引创建来解决 -- 在创建索引的语句最后添加一个 async执行语句会直接返回结果但是索引表状态是处于building。每一个put/delete操作执行前会先写入到主表的 Write Ahead Log (WAL) 中如果出现HBase服务器宕机则可以从WAL中回放执行之前没有完成的操作用来保证高并发、持久化的日志保存与回放机制。因为索引表的更新可能会落后于主表一小部分。WAL日志文件使用的是Hadoop Sequence文件格式其主要特点二进制格式。row key, family, qualifier, timestamp, value等HBase byte[]数据都原封不动地顺序写入文件。Sequence文件中每隔若干行会插入一个16字节的魔数作为分隔符。这样如果文件损坏导致某一行残缺不全可以通过这个魔数分隔符跳过这一行继续读取下一个完整的行。支持压缩。可以按行压缩。也可以按块压缩(将多行打成一个块)2. Phoenix加盐加盐的目的是为了让数据分散到不同机器缓解查询压力如果行键即数据单调增加那么数据会分布在一个region里可能会造成热点问题 通过添加 SALT_BUCKETS Num(0 -- 256) 来对行键添加一个字节使得数据能更均匀分布到各个region中。其中0是关闭对数据表添加了盐分的索引的盐析的一种特殊方式(因为默认情况下索引与其数据表具有相同数量的盐桶)由于加盐表不会顺序存储数据因此严格的顺序扫描不会以自然排序的方式返回所有数据。强制进行顺序扫描的子句(例如带有LIMIT的子句)可能会返回与普通表不同的数据顺序。new_row_key (index % BUCKETS_NUMBER) original_key3. 主键查询通过关键字 !primarykeys table 或者下面这段查询selectTENANT_ID TABLE_CAT,TABLE_SCHEM,TABLE_NAME ,COLUMN_NAME,KEY_SEQ,PK_NAME,CASE WHEN SORT_ORDER 1 THEN D ELSE A END ASC_OR_DESC,ExternalSqlTypeId(DATA_TYPE) AS DATA_TYPE,SqlTypeName(DATA_TYPE) AS TYPE_NAME,COLUMN_SIZE,DATA_TYPE TYPE_ID,VIEW_CONSTANT from SYSTEM.CATALOG SYSTEM.TABLE whereTABLE_SCHEM MODEL_GROUP_RULE_ACCOUNT_TESTand TABLE_NAME ECEJ_CALLING_CENTER_Hand COLUMN_NAME is not nulland COLUMN_FAMILY is nullorder by TENANT_ID,TABLE_SCHEM,TABLE_NAME ,COLUMN_NAME4. 修改字段长度当创建好phoenix的表后 默认情况下phoenix不允许修改字段类型和长度。但是可以通过直接修改 SYSTEM.CATALOG 里的数据达到目的upsert into SYSTEM.CATALOG (TENANT_ID,TABLE_SCHEM,TABLE_NAME,COLUMN_NAME,COLUMN_FAMILY,DATA_TYPE,COLUMN_SIZE) values(,库,表,字段,0,12,50);测试发现即使上面的上SQL执行成功重新执行 upsert 往表里插入数据DEBIT_AMOUNT(初始长度6)超过初始长度的还是不能成功经过查看源码发现在 SYSTEM.CATALOG 上有协处理器 这个里面有表元数据缓存默认要三个小时过期org.apache.phoenix.cache.GlobalCachelong maxTTL this.config.getLong(phoenix.coprocessor.maxMetaDataCacheTimeToLiveMs, 1800000L);long maxSize this.config.getLong(phoenix.coprocessor.maxMetaDataCacheSize, 20971520L);猜想修改长度后三小时能生效或者在hbase shell 中 先 disable SYSTEM.CATALOG, 然后在 enable SYSTEM.CATALOG