南修子学Hbase-Hbase实战项目-xx微博

本文通过三张表——内容表、用户关系表和微博收件箱表,详细介绍了如何使用Hbase实现xx微博的功能。内容表以用户ID和时间戳作为rowkey,存储微博内容;用户关系表分别记录用户关注和粉丝信息;微博收件箱表用于存储用户的收件信息,每个用户列存储被关注者发布的微博。提供了相关代码如pom.xml、Constants、HbaseUtil和HBaseDao等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三张表
我们用三张表来实现

1:内容表

rowkey:uid+“_”+ts
cf:只有一个列族就是info,info里面有一个列content,因为一个人可能发非常多的微博,使用添加列或者多个版本的形式都不适合,value就是微博内容

2:用户关系表

rowkey:uid
cf1:attends 多个列:uid 这个代表了该用户关注了谁,一个用户使用一个列,value也是uid
cf2:fans 多个列:uid 这个代表了该用户的粉丝,一个用户使用一个列,value也是uid

3:微博收件箱表

rowkey:uid
cf:只有一个列族info 列:uid 这个代表了该用户的被关注者的uid,一个用户使用一个列,value里面是该用户的被关注者发布的微博,我们设定3个版本

下面是一些代码
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>hbase_demo</artifactId>
        <groupId>org.hrx</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>weibo</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>

</project>

常量类Constants

package com.nanxiuzi.constants;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;

public class Constants {
   
    //HBase的配置信息
    public static final Configuration CONFIGURATION= HBaseConfiguration.create();
    //命名空间
    public static final String NAMESPACE="weibo";
    //微博内容表
    public static final String CONTENT_TABLE="weibo:content";
    public static final String CONTENT_TABLE_CF="info";
    public static final int CONTENT_TABLE_VERSION=1;
    //用户关系表
    public static final String RELATION_TABLE="weibo:relation";
    public static final String RELATION_TABLE_CF1="attends";
    public static final String RELATION_TABLE_CF2="fans";
    public static final int RELATION_TABLE_VERSION=1;
    //收件箱表  
    public static final String INBOX_TABLE="weibo:inbox";
    public static final String INBOX_TABLE_CF="info";
    public static final int INBOX_TABLE_VERSION=2;

}

工具类HbaseUtil

package com.nanxiuzi.utils;

import com.nanxiuzi.constants.Constants;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;

/**
 * 创建命名空间
 * 判断表是否存在
 * 创建表
 *
 */
public class HbaseUtil {
   

    /**
     * 创建命名空间
     * @param nameSpace
     */
    public static void createNameSpace(String nameSpace) throws IOException {
   
        /*
        公用的工具类,最好还是在具体代码里面获取连接并关闭链接
        获取Connection对象
         */
            Connection conn = ConnectionFactory.createConnection(Constants.CONFIGURATION);

        /*
        获取Admin对象
         */
        Admin admin = conn.getAdmin();
        /*
        创建命名空间描述器
         */
        NamespaceDescriptor namespaceDescriptor = NamespaceDescriptor.create(nameSpace).build();
        /*
         创建命名空间
         */
        admin.createNamespace(namespaceDescriptor);
        /*
        关闭资源
         */
        admin.close();
        conn.close();
    }

    /**
     * 判断表是否存在,因为是给创建表方法调用,所以设置成private
     * @param tableName
     * @return
     */
    private static boolean isTableExist(String tableName) throws IOException {
   
 /*
        公用的工具类,最好还是在具体代码里面获取连接并关闭链接
        获取Connection对象
         */
        Connection conn = ConnectionFactory.createConnection(Constants.CONFIGURATION);

        /*
        获取Admin对象
         */
        Admin admin = conn.getAdmin();

        /*
        判断是否存在
         */
        boolean isExist = admin.tableExists(TableName.valueOf(tableName));
        /*
        关闭资源
         */
        admin.close();
        conn.close();
        /*
        返回结果
         */
        return isExist;
    }

    /**
     * 创建表
     * @param tableName
     * @param versions 版本数
     * @param cfs 列族
     */
    public static void createTable(String tableName,int versions,String ...cfs) throws IOException {
   
        //判断是否传入了列族信息
        if(cfs.length==0){
   
          
<think>嗯,用户想优化他的电脑配置,避免卡顿。他提到的是32GB内存和i7-14650HX处理器,同时需要运行多任务,包括浏览器、飞书、轻推、DBeaver和IDEA。首先,我需要分析这些组件各自的资源消耗情况,然后给出针对性的优化建议。 首先,硬件方面,32GB内存应该足够处理多任务,但要注意内存分配是否合理。i7-14650HX是高性能移动处理器,多核处理能力强,但散热可能是个问题,需要确保良好的散热以避免降频。可能建议用户检查散热情况,比如使用散热垫或确保通风良好。 接下来是软件层面的优化。浏览器通常是内存和CPU的大户,尤其是多个标签页或扩展程序。建议用户减少同时打开的标签页,禁用不必要的扩展,或者使用更轻量的浏览器。比如,推荐用Chrome的内存节省模式或者Edge的效率模式。 飞书和轻推作为办公通讯工具,可能占用一定的内存和CPU,但相对较轻。不过如果长时间运行,累积的内存占用可能也不容忽视,建议定期重启这些应用。 DBeaver和IDEA是开发工具,尤其是IDEA,在大型项目下会消耗大量内存。需要调整它们的JVM参数,比如增加堆内存分配,但也要避免过度分配导致其他应用资源不足。例如,IDEA的默认Xmx可能较低,可以适当调高到4GB或根据项目需求调整,同时启用G1垃圾回收器提高性能。 系统层面,Windows的电源管理模式需要设置为高性能,确保CPU全速运行。后台进程和服务也需要检查,禁用不必要的启动项,释放更多资源给前台应用。使用任务管理器或第三方工具如CCleaner来管理启动项。 存储方面,如果使用的是HDD,建议升级到SSD,这对整体系统响应速度有很大提升。同时,确保系统盘有足够的剩余空间,避免磁盘碎片影响性能。 虚拟内存设置也是一个点,虽然物理内存足够,但适当增加虚拟内存可以预防突发的高内存需求。建议设置为物理内存的1.5倍左右,即48GB,但放在SSD上以减少延迟。 IDEA的优化还可以包括关闭不必要的插件,使用离线模式避免索引更新,调整代码检查的级别,减少实时分析的压力。DBeaver方面,优化SQL查询、关闭自动同步功能,调整连接池大小,都能减少资源占用。 另外,多任务运行时,合理分配任务到不同的CPU核心可能会有帮助,但操作系统通常会自动处理。用户也可以尝试将高负载应用绑定到特定核心,不过这可能比较复杂。 需要提醒用户定期监控资源使用情况,比如用任务管理器或第三方工具如Process Explorer,找出资源消耗大的进程,针对性处理。同时,保持系统和应用的更新,确保性能优化和bug修复。 可能用户没有提到的还有磁盘I/O的问题,如果同时运行多个数据库或开发工具,磁盘读写可能会成为瓶颈,尤其是如果项目文件很大。SSD和足够的RAM可以缓解这个问题。 最后,建议用户分步骤实施优化措施,先处理最影响性能的部分,比如IDEA和浏览器的设置,再逐步调整其他方面。同时注意不要过度优化,避免引入新的问题,比如内存分配过大导致OOM错误。</think>### 优化电脑配置以避免卡顿的综合建议 #### 一、硬件与系统层面的优化 1. **内存分配与监控** - **32GB内存**已能满足多任务需求,但需避免内存泄漏。建议使用工具(如`Windows任务管理器`或`Process Explorer`)监控内存占用。若发现DBeaver或IDEA占用过高,可调整其JVM参数: ```ini # IDEA的VM调优示例(修改idea64.exe.vmoptions) -Xms2g -Xmx8g # 根据项目规模调整堆内存上限 -XX:+UseG1GC # 启用G1垃圾回收器 ``` - **浏览器优化**:Chrome/Firefox等浏览器多标签页易导致内存占用飙升,建议: - 使用标签页管理扩展(如`OneTab`)。 - 禁用冗余插件,启用浏览器的内存节省模式[^4]。 2. **CPU与散热管理** - **i7-14650HX**为14核20线程处理器,多任务性能强劲,但需确保散热良好: - 使用散热底座或笔记本支架。 - 通过`ThrottleStop`或`Intel XTU`监控温度,避免因过热降频。 3. **存储优化** - **SSD必要性**:若系统盘为HDD,升级至NVMe SSD可显著减少I/O延迟(如IDEA项目加载时间)。 - **虚拟内存设置**:建议将分页文件(虚拟内存)放在SSD,大小设为物理内存的1.5倍(即48GB)[^1]。 #### 二、软件与开发工具调优 1. **IDEA性能调优** - **代码索引优化**: ```ini # 减少索引范围(例如排除node_modules目录) File -> Project Structure -> Exclude ``` - **关闭冗余插件**:通过`Plugins`菜单停用非必需插件(如GitToolBox、JPA Buddy)。 - **启用"省电模式"**:`File -> Power Save Mode`可暂停后台代码分析。 2. **DBeaver连接与查询优化** - **驱动配置**:确保使用与数据库匹配的JDBC驱动(如Phoenix连接HBase时需`phoenix-client-hbase-*.jar`)[^3]。 - **查询限制**:设置默认返回行数(`Preferences -> Databases -> SQL Processing`)以避免大数据量卡顿。 3. **多任务资源隔离** - **进程优先级调整**:通过任务管理器将IDEA/DBeaver设为`高`优先级。 - **CPU亲和性绑定**(进阶):使用`Process Lasso`为关键进程分配固定核心,减少上下文切换开销。 #### 三、系统级配置 1. **电源管理** - 设置为`高性能模式`(控制面板 -> 电源选项),禁用USB选择性暂停。 2. **后台服务清理** - 通过`msconfig`或`Services.msc`停用非必要服务(如`SysMain`、`Windows Search`)。 3. **注册表优化** - 调整`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management`中的`LargeSystemCache`值为`1`(提升大内存系统缓存效率)。 #### 四、实战验证与监控 1. **基准测试** - 使用`PCMark 10`模拟多任务场景,对比优化前后分数。 - 通过`JConsole`监控IDEA的GC频率与堆内存使用。 2. **典型场景示例** - **同时运行**:Chrome(20标签页)+ IDEA(Java项目编译)+ DBeaver(执行复杂查询): - 目标:内存占用≤24GB,CPU平均负载≤70%。 - 若超出阈值,按前述步骤逐项排查。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南修子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值