96SEO 2026-02-19 10:36 18
创建一个学生信息表用来存储学生的姓名姓名作为行键且假设姓名不会重复以及考试成绩其中考试成绩score是一个列族存储了各个科目的考试成绩。

然后向student中添加数据
dependencygroupIdorg.apache.hbase/groupIdartifactIdhbase-server/artifactIdversion2.2.0/version
dependencygroupIdorg.apache.hbase/groupIdartifactIdhbase-client/artifactIdversion2.2.0/version
com.example.demo.service.ICodeService;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.boot.ApplicationArguments;
org.springframework.boot.ApplicationRunner;
org.springframework.core.annotation.Order;
org.springframework.stereotype.Component;import
HBaseConfiguration.create();System.setProperty(HADOOP_USER_NAME,
hadoop);conf.set(HADOOP_USER_NAME,
hadoop);conf.set(hbase.root.dir,
hdfs://master:9000/hbase);conf.set(hbase.zookeeper.quorum,
master);//配置Zookeeper的ip地址conf.set(hbase.zookeeper.property.clientPort,
ConnectionFactory.createConnection(conf);admin
TableName.valueOf(myTableName);if
HTableDescriptor(tableName);//for
hTableDescriptor.addFamily(hColumnDescriptor);//}//admin.createTable(hTableDescriptor);TableDescriptorBuilder
TableDescriptorBuilder.newBuilder(tableName);
ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(str)).build();//
tableDescriptor.setColumnFamily(columnFamily);
设置列族}admin.createTable(tableDescriptor.build());
conn.getTable(TableName.valueOf(tableName));Put
Put(rowkey.getBytes());put.addColumn(colFamily.getBytes(),col.getBytes(),value.getBytes());table.put(put);table.close();}/***
conn.getTable(TableName.valueOf(tableName));Delete
Delete(rowkey.getBytes());table.delete(delete);table.close();}/***
conn.getTable(TableName.valueOf(tableName));Get
Get(rowkey.getBytes());get.addColumn(colFamily.getBytes(),col.getBytes());Result
table.get(get);System.out.println(new
String(result.getValue(colFamily.getBytes(),col.getBytes())));table.close();}public
{init();createTable(student,new
String[]{score});insertData(student,zhangsan,score,English,69);insertData(student,zhangsan,score,Math,86);insertData(student,zhangsan,score,Computer,77);getData(student,zhangsan,score,Computer);close();}
匹配完整字节数组Bytes.compareTo(byte[])
3.1、ResultScanner结果处理handleResultScanner
handleResultScanner(ResultScanner
{//因为ResultScanner类继承了迭代器//使用增强for循环遍历for
Bytes.toString(rs.getRow());System.out.println(当前行的rowkey为
id);//继续增强for循环得到每一行中的每一个单元格列//获取一行中的所有单元格for
Bytes.toString(CellUtil.cloneFamily(cell));//获取该单元格的列名String
Bytes.toString(CellUtil.cloneQualifier(cell));//获取该单元格的列值String
Bytes.toString(CellUtil.cloneValue(cell));System.out.println(family
Bytes.toString(rs.getValue(info.getBytes(),
Bytes.toString(rs.getValue(info.getBytes(),
Bytes.toString(rs.getValue(info.getBytes(),
Bytes.toString(rs.getValue(info.getBytes(),
clazz.getBytes()));System.out.println(学号
通过RowFilter与BinaryComparator过滤比rowKey
TableName.valueOf(students);Table
BinaryComparator(1500100010.getBytes());
RowFilter(CompareOperator.LESS,
Scan();scan.setFilter(rowFilter);
studentTable.getScanner(scan);handleResultScanner(scanner);
通过FamilyFilter与SubstringComparator查询列簇名包含in的所有列簇下面的数据*/
TableName.valueOf(students);Table
//创建一个比较器对象//只要列簇名中包含了in就把该列簇下的所有列查询出来SubstringComparator
FamilyFilter(CompareOperator.EQUAL,
Scan();scan.setFilter(familyFilter);
studentTable.getScanner(scan);handleResultScanner(scanner);
TableName.valueOf(students);Table
//创建前缀比较器BinaryPrefixComparator
BinaryPrefixComparator(i.getBytes());
FamilyFilter(CompareOperator.EQUAL,
Scan();scan.setFilter(familyFilter);
studentTable.getScanner(scan);handleResultScanner(scanner);
通过QualifierFilter与SubstringComparator查询列名包含ge的列的值**/
TableName.valueOf(students);Table
//创建包含比较器//age//genderSubstringComparator
QualifierFilter(CompareOperator.EQUAL,
Scan();scan.setFilter(qualifierFilter);
studentTable.getScanner(scan);handleResultScanner(scanner);
通过QualifierFilter与SubstringComparator查询列名包含ge的列的值*/
TableName.valueOf(students);Table
QualifierFilter(CompareOperator.EQUAL,
Scan();scan.setFilter(qualifierFilter);
studentTable.getScanner(scan);handleResultScanner(scanner);
通过ValueFilter与BinaryPrefixComparator过滤出所有的cell中值以
TableName.valueOf(students);Table
//创建前缀比较器BinaryPrefixComparator
BinaryPrefixComparator(张.getBytes());
ValueFilter(CompareOperator.EQUAL,
Scan();scan.setFilter(valueFilter);
//因为ResultScanner类继承了迭代器//使用增强for循环遍历
Bytes.toString(CellUtil.cloneFamily(cell));
Bytes.toString(CellUtil.cloneQualifier(cell));
Bytes.toString(CellUtil.cloneValue(cell));
handleResultScanner(scanner);}
过滤出文科的学生只会返回以文科开头的数据列其他列的数据不符合条件不会返回*/
//创建正则比较器RegexStringComparator
ValueFilter(CompareFilter.CompareOp.EQUAL,
Scan();scan.setFilter(valueFilter);
students.getScanner(scan);handleResultScanner(scanner);
SingleColumnValueFilter会返回满足条件的cell所在行的所有cell的值即会返回一行数据**
通过SingleColumnValueFilter与查询文科班所有学生信息*/
TableName.valueOf(students);Table
//创建一个正则比较器RegexStringComparator
//创建单列值过滤器对象SingleColumnValueFilter
SingleColumnValueFilter(info.getBytes(),clazz.getBytes(),CompareOperator.EQUAL,regexStringComparator);
Scan();scan.setFilter(singleColumnValueFilter);
studentTable.getScanner(scan);handleResultScanner(scanner);
3.7、列值排除过滤器SingleColumnValueExcludeFilter
与SingleColumnValueFilter相反会排除掉指定的列其他的列全部返回**
通过SingleColumnValueExcludeFilter与BinaryComparator查询文科一班所有学生信息最终不返回clazz列*/
SingleColumnValueExcludeFilter(){try
TableName.valueOf(students);Table
BinaryComparator(文科一班.getBytes());
//创建一个列值排除过滤器SingleColumnValueExcludeFilter
SingleColumnValueExcludeFilter(info.getBytes(),clazz.getBytes(),CompareOperator.EQUAL,binaryComparator);
Scan();scan.setFilter(singleColumnValueExcludeFilter);
studentTable.getScanner(scan);handleResultScanner(scanner);
通过PrefixFilter查询以150010008开头的所有前缀的rowkey*/
TableName.valueOf(students);Table
PrefixFilter(150010008.getBytes());Scan
scan.setFilter(prefixFilter);ResultScanner
studentTable.getScanner(scan);handleResultScanner(scanner);
Scan();//设置起始rowKeyscan.setStartRow(.getBytes());//设置最大的返回结果返回pageSize条scan.setMaxResultSize(pageSize);//分页过滤器PageFilter
PageFilter(pageSize);scan.setFilter(pageFilter);ResultScanner
result.getRow();System.out.println(数据的rowKey为
cell.getValue();//id列和age列是整型数据if
(f1.equals(Bytes.toString(family))
id.equals(Bytes.toString(qualifier))
age.equals(Bytes.toString(value))){System.out.println(列族为Bytes.toString(family)列名为Bytes.toString(qualifier)列值为Bytes.toInt(value));}
{System.out.println(列族为Bytes.toString(family)列名为Bytes.toString(qualifier)列值为Bytes.toString(value));}}}}
1;scan.setMaxResultSize(resultSize);//设置一次性往前扫描5条最后一个rowKey是第三页起始rowKeyPageFilter
PageFilter(resultSize);scan.setFilter(pageFilter);//resultScanner里面有5条数据ResultScanner
Scan();scan1.setStartRow(startRow.getBytes());scan1.setMaxResultSize(pageSize);PageFilter
PageFilter(pageSize);scan1.setFilter(pageFilter1);ResultScanner
result.getRow();System.out.println(数据的rowKey为
Bytes.toString(CellUtil.cloneFamily(cell));//获取该单元格的列名String
Bytes.toString(CellUtil.cloneQualifier(cell));//获取该单元格的列值String
Bytes.toString(CellUtil.cloneValue(cell));//id列和age列是整型数据if
(f1.equals(Bytes.toString(family))
id.equals(Bytes.toString(qualifier))
age.equals(Bytes.toString(value))){System.out.println(列族为Bytes.toString(family)列名为Bytes.toString(qualifier)列值为Bytes.toInt(value));}
{System.out.println(列族为Bytes.toString(family)列名为Bytes.toString(qualifier)列值为Bytes.toString(value));}}}}
通过运用4种比较器过滤出姓于年纪大于23岁性别为女且是理科的学生。
**
TableName.valueOf(students);Table
第一个过滤器过滤出是理科开头的班级*/RegexStringComparator
RegexStringComparator(^理科.*);//单列值过滤器SingleColumnValueFilter
SingleColumnValueFilter(info.getBytes(),
clazz.getBytes(),CompareOperator.EQUAL,
SubstringComparator(女);SingleColumnValueFilter
SingleColumnValueFilter(info.getBytes(),
gender.getBytes(),CompareOperator.EQUAL,
第三个过滤器过滤出年龄大于23岁的*/BinaryComparator
BinaryComparator(20.getBytes());SingleColumnValueFilter
SingleColumnValueFilter(info.getBytes(),
age.getBytes(),CompareOperator.GREATER,
第四个过滤器过滤出姓于的学生*/BinaryPrefixComparator
BinaryPrefixComparator(于.getBytes());SingleColumnValueFilter
SingleColumnValueFilter(info.getBytes(),
name.getBytes(),CompareOperator.EQUAL,
//要想实现多个需求同时过滤就需要创建多个过滤器添加到一个过滤器列表中//然后将过滤器列表传给扫描器scanFilterList
FilterList();filterList.addFilter(singleColumnValueFilter);filterList.addFilter(singleColumnValueFilter1);filterList.addFilter(singleColumnValueFilter2);filterList.addFilter(singleColumnValueFilter3);
TableName.valueOf(students);Table
创建第一个过滤器过滤是以15001001开头的rowkey*/BinaryPrefixComparator
BinaryPrefixComparator(15001001.getBytes());//创建行键过滤器RowFilter
RowFilter(CompareOperator.EQUAL,
创建第二个过滤器过滤出文科的学生*/RegexStringComparator
RegexStringComparator(^文科.*);SingleColumnValueFilter
SingleColumnValueFilter(info.getBytes(),
clazz.getBytes(),CompareOperator.EQUAL,regexStringComparator);
FilterList();filterList.addFilter(rowFilter);filterList.addFilter(singleColumnValueFilter);
Scan();scan.setFilter(filterList);ResultScanner
studentTable.getScanner(scan);handleResultScanner(scanner);
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback