目录
一、HBase简介
(一)概念
(二)特点
(三)HBase架构
二、HBase原理
(一)读流程
(二)写流程
(三)数据 flush 过程
(四)数据合并过程
三、HBase安装与配置
(一)解压并安装HBase
(二)配置HBase
(三)配置Spark
四、HBase的使用
(一)进入HBase shell
(二)表的管理
(三)表数据的增删改查
一、HBase简介
(一)概念
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
(二)特点
1、海量存储 HBase适合存储PB级别的海量数据,在PB级别的数据以及采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。这与HBase的极易扩展性息息相关。正式因为HBase良好的扩展性,才为海量数据的存储提供了便利。
2、列式存储 这里的列式存储其实说的是列族存储,HBase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。
3、极易扩展 HBase 的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS) 。通过横向添加RegionSever的机器,进行水平扩展,提升HBase 上层的处理能力,提升HBsae服务更多Region 的能力。 备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升 HBase的数据存储能力和提升后端存储的读写力。
4、高并发 由于目前大部分使用HBase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,HBase的单个IO延迟下降并不多。能获得高并发、低延迟的服务。
5、稀疏 稀疏主要是针对HBase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
(三)HBase架构
HBase架构如图所示。
从图中可以看出 HBase 是由 Client、Zookeeper、Master、HRegionServer、HDFS 等几个组件组成,下面来介绍一下几个组件的相关功能:
1、Client Client 包含了访问 HBase 的接口,另外 Client 还维护了对应的 cache 来加速 HBase 的访问,比如 cache 的.META.元数据的信息。
2、Zookeeper HBase 通过 Zookeeper 来做 master 的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。具体工作如下: (1)通过 Zoopkeeper 来保证集群中只有 1 个 master 在运行,如果 master 异常,会通过竞争机制产生新的 master 提供服务。 (2)通过 Zoopkeeper 来监控 RegionServer 的状态,当 RegionSevrer 有异常的时候,通过回调的形式通知 Master RegionServer 上下线的信息。 (3)通过 Zoopkeeper 存储元数据的统一入口地址。
3、Hmaster master 节点的主要职责如下: 为 RegionServer 分配 Region 维护整个集群的负载均衡 维护集群的元数据信息 发现失效的 Region,并将失效的 Region 分配到正常的 RegionServer 上 当 RegionSever 失效的时候,协调对应 Hlog 的拆分
4、HregionServer HregionServer 直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下: 管理 master 为其分配的 Region 处理来自客户端的读写请求 负责和底层 HDFS 的交互,存储数据到 HDFS 负责 Region 变大以后的拆分 负责 Storefile 的合并工作
5、HDFS HDFS 为 HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用(Hlog 存储在HDFS)的支持,具体功能概括如下: 提供元数据和表数据的底层分布式存储服务 数据多副本,保证的高可靠和高可用性
二、HBase原理
(一)读流程
1、Client 先访问 zookeeper,从 meta 表读取 region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 region 信息; 2、根据 namespace、表名和 rowkey 在 meta 表中找到对应的 region 信息; 3、找到这个 region 对应的 regionserver; 4、查找对应的 region; 5、先从 MemStore 找数据,如果没有,再到 BlockCache 里面读; 6、BlockCache 还没有,再到 StoreFile 上读(为了读取的效率); 7、如果是从 StoreFile 里面读取的数据,不是直接返回给客户端,而是先写入 BlockCache,再返回给客户端。
(二)写流程
1、Client 向 HregionServer 发送写请求; 2、HregionServer 将数据写到 HLog(write ahead log)。为了数据的持久化和恢复; 3、HregionServer 将数据写到内存(MemStore); 4、反馈 Client 写成功。
(三)数据 flush 过程
1、当 MemStore 数据达到阈值(默认是 128M,老版本是 64M),将数据刷到硬盘,将内存中的数据删除,同时删除 HLog 中的历史数据; 2、并将数据存储到 HDFS 中; 3、在 HLog 中做标记点。
(四)数据合并过程
1、当数据块达到 4 块,Hmaster 触发合并操作,Region 将数据块加载到本地,进行合并; 2、当合并的数据超过 256M,进行拆分,将拆分后的 Region 分配给不同的 HregionServer 管理; 3、当HregionServer宕机后,将HregionServer上的hlog拆分,然后分配给不同的HregionServer加载,修改.META.; 4、注意:HLog 会同步到 HDFS。
三、HBase安装与配置
(一)解压并安装HBase
首先,到HBase官网将HBase安装包下载到 /usr/local/uploads 目录下,再切换到该目录下解压安装到 /usr/local/servers 目录下。
Apache HBase – Apache HBase Downloads https://hbase.apache.org/downloads.html
[root@bigdata zhc]# cd /usr/local/uploads
[root@bigdata uploads]# tar -zxvf hbase-2.4.14-bin.tar.gz -C /usr/local/servers
[root@bigdata uploads]# cd ../servers
[root@bigdata servers]# mv hbase-2.4.14/ hbase
这些就是HBase包含的文件:
(二)配置HBase
1、修改环境变量hbase-env.sh
[root@bigdata conf]# vi hbase-env.sh
在文件开头加入如下内容:
export JAVA_HOME=/usr/local/servers/jdk
export HBASE_CLASSPATH=/usr/local/servers/hbase/conf
export HBASE_MANAGES_ZK=true
指定了jdk路径和HBase路径。
注意:另外,定位到(HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true")这一行。还要将如下图所示红框标出的那一行前面的“#”删掉,防止后面启动HBase日志冲突。
2、修改配置文件hbase-site.xml
[root@bigdata conf]# vi hbase-site.xml
在两个标签之间加入如下内容:
hbase.rootdir
hdfs://localhost:9000/hbase
hbase.cluster.distributed
true
hbase.zookeeper.property.dataDir
/usr/local/servers/zookeeper/data
hbase.unsafe.stream.capability.enforce
false
3、设置环境变量,编辑系统配置文件/etc/profile。
[root@bigdata conf]# vi /etc/profile
[root@bigdata conf]# source /etc/profile #使文件生效
将下面代码加到文件末尾。
export HBASE_HOME=/usr/local/servers/hbase
export PATH=$PATH:$HBASE_HOME/bin
export CLASSPATH=$CLASSPATH:$HBASE_HOME/lib
4、启动并验证HBase
由于HBase是基于Hadoop的,所以要先启动Hadoop。
[root@bigdata conf]# start-dfs.sh
[root@bigdata conf]# start-hbase.sh
这便是有无日志冲突 的区别!(下图是有日志冲突的) 所以务必要将 HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true" 这一行前的“#”删除!
由此可以发现,多了HRegionServer、HQuorumPeer、HMaster 三个进程。
进入HBase-shell,并输入“version”查看当前HBase版本。
[root@bigdata hbase]# hbase shell
hbase:001:0> version
(三)配置Spark
配置Spark的目的是为了以后可以通过pypark向HBase中读取和写入数据。
把HBase的lib目录下的一些jar文件拷贝到Spark中,这些都是编程时需要引入的jar包,需要拷贝的jar文件包括:所有hbase开头的jar文件、guava-11.0.2.jar和protobuf-java-2.5.0.jar。
执行如下命令:
[root@bigdata hbase]# cd /usr/local/spark/jars
[root@bigdata jars]# mkdir hbase
[root@bigdata jars]# cd hbase
[root@bigdata hbase]# cp /usr/local/servers/hbase/lib/hbase*.jar ./
[root@bigdata hbase]# cp /usr/local/servers/hbase/lib/guava-11.0.2.jar ./
[root@bigdata hbase]# cp /usr/local/servers/hbase/lib/protobuf-java-2.5.0.jar ./
htrace-core-3.1.0-incubating.jar 下载地址:
https://repo1.maven.org/maven2/org/apache/htrace/htrace-core/3.1.0-incubating/htrace-core-3.1.0-incubating.jar https://repo1.maven.org/maven2/org/apache/htrace/htrace-core/3.1.0-incubating/htrace-core-3.1.0-incubating.jar
[root@bigdata hbase]# cp /usr/local/uploads/htrace-core-3.1.0-incubating.jar ./
此外,在Spark 2.0以上版本中,缺少把HBase数据转换成Python可读取数据的jar包,需要另行下载。可以访问下面地址下载spark-examples_2.11-1.6.0-typesafe-001.jar:
https://mvnrepository.com/artifact/org.apache.spark/spark-examples_2.11/1.6.0-typesafe-001 https://mvnrepository.com/artifact/org.apache.spark/spark-examples_2.11/1.6.0-typesafe-001
[root@bigdata hbase]# cp /usr/local/uploads/spark-examples_2.11-1.6.0-typesafe-001.jar ./
拷贝完成后,/usr/local/spark/jars/hbase 目录下的 jar 包如下图所示;
然后,使用vim编辑器打开spark-env.sh文件,设置Spark的spark-env.sh文件,告诉Spark可以在哪个路径下找到HBase相关的jar文件,命令如下:
[root@bigdata hbase]# cd /usr/local/spark/conf
[root@bigdata conf]# vi spark-env.sh
打开spark-env.sh文件以后,可以在文件最前面增加下面一行内容:
export SPARK_DIST_CLASSPATH=$(/usr/local/servers/hadoop/bin/hadoop classpath):$(/usr/local/servers/hbase/bin/hbase classpath):/usr/local/spark/jars/hbase/*
这样,后面编译和运行过程才不会出错。
四、HBase的使用
(一)进入HBase shell
[root@bigdata conf]# cd /usr/local/servers/hbase
[root@bigdata hbase]# hbase shell
(二)表的管理
1、列举表 命令如下:
hbase(main)> list
2、创建表 语法格式:create
,{NAME => ,VERSIONS => } 例如,创建表t1,有两个family name:f1、f2,且版本数均为2, 命令如下:
hbase(main)> create 't1',{NAME => 'f1', VERSIONS => 2},{NAME => 'f2', VERSIONS => 2}
3、删除表 删除表分两步:首先使用disable 禁用表,然后再用drop命令删除表。 例如,删除表t1操作如下:
hbase(main)> disable 't1'
hbase(main)> drop 't1'
4、查看表的结构 语法格式:describe
例如,查看表t1的结构,命令如下:
hbase(main)> describe 't1'
5、修改表的结构 修改表结构必须用disable禁用表,才能修改。 语法格式:alter 't1',{NAME => 'f1'},{NAME => 'f2',METHOD => 'delete'} 例如,修改表test1的cf的TTL为180天,命令如下:
hbase(main)> disable 'test1'
hbase(main)> alter 'test1',{NAME=>'body',TTL=>'15552000'},{NAME=>'meta', TTL=>'15552000'}
hbase(main)> enable 'test1'
6、权限管理 ① 分配权限 语法格式:grant 说明:参数后面用逗号分隔。 权限用“RWXCA”五个字母表示,其对应关系为: READ('R')、WRITE('W')、EXEC('X')、CREATE('C')、ADMIN('A')。 例如,为用户‘test’分配对表t1有读写的权限,命令如下:
hbase(main)> grant 'test','RW','t1'
② 查看权限 语法格式:user_permission
例如,查看表t1的权限列表,命令如下:
hbase(main)> user_permission 't1'
③ 收回权限 与分配权限类似,语法格式:revoke 例如,收回test用户在表t1上的权限,命令如下:
hbase(main)> revoke 'test','t1'
(三)表数据的增删改查
1、添加数据 语法格式:put
,,,, 例如,给表t1的添加一行记录,其中,rowkey是rowkey001,family name是f1,column name是col1,value是value01,timestamp为系统默认。则命令如下:
hbase(main)> put 't1','rowkey001','f1:col1','value01'
2、查询数据 ① 查询某行记录 语法格式:get
,,[,....] 例如,查询表t1,rowkey001中的f1下的col1的值,命令如下:
hbase(main)> get 't1','rowkey001', 'f1:col1'
或者用如下命令:
hbase(main)> get 't1','rowkey001', {COLUMN=>'f1:col1'}
查询表t1,rowke002中的f1下的所有列值,命令如下:
hbase(main)> get 't1','rowkey001'
② 扫描表 语法格式:scan
,{COLUMNS => [ ,.... ],LIMIT => num} 另外,还可以添加STARTROW、TIMERANGE和FITLER等高级功能。 例如,扫描表t1的前5条数据,命令如下:
hbase(main)> scan 't1',{LIMIT=>5}
③ 查询表中的数据行数 语法格式:count
,{INTERVAL => intervalNum,CACHE => cacheNum} 其中,INTERVAL设置多少行显示一次及对应的rowkey,默认为1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度。 例如,查询表t1中的行数,每100条显示一次,缓存区为500,命令如下:
hbase(main)> count 't1', {INTERVAL => 100, CACHE => 500}
3、删除数据 ① 删除行中的某个值 语法格式:delete
,,, 这里必须指定列名。 例如,删除表t1,rowkey001中的f1:col1的数据,命令如下:
hbase(main)> delete 't1','rowkey001','f1:col1'
② 删除行 语法格式:deleteall
,,, 这里可以不指定列名,也可删除整行数据。 例如,删除表t1,rowk001的数据,命令如下:
hbase(main)> deleteall 't1','rowkey001'
③ 删除表中的所有数据 语法格式:truncate
其具体过程是:disable table -> drop table -> create table 例如,删除表t1的所有数据,命令如下:
hbase(main)> truncate 't1'
最后友情提醒:使用完HBase和Hadoop后,要先关闭HBase,再关闭Hadoop!
你可能感兴趣的:(Spark编程基础,大数据技术基础,分布式,hbase,数据库,大数据)
微服务分布式事务的几种解决方案及应用场景
凌晨四点的打铁声
分布式事务 微服务 分布式 数据库 springcloud
文章目录分布式事务的几种方案1.2pcseata的AT一阶段二阶段-回滚二阶段-提交2.柔性事务——TCC事务补偿型3.柔性事务-最大努力通知型方案4.柔性事务-可靠消息+最终一致性方案(异步确保型)分布式事务的几种方案2pc模式TCC模式:柔性事务——TCC事务补偿型柔性事务-最大努力通知型方案柔性事务-可靠消息+最终一致性方案(异步确保型)1.2pc2pc就是2phasecommit二阶段提交
Redis配置与优化
?ccc?
redis 数据库 缓存
目录一:Redis介绍1:关系数据库与非关系型数据库2:Redis基础2.1Redis简介2.2Redis安装部署2.3配置参数3:Redis命令工具3.1redis-cli命令行工具3.2redis-benchmark测试工具4:Redis数据库常用命令4.1key相关命令4.2多数据库常用命令二:Redis持久化1:RDB和AOF的区别2:RDB和AOF的优缺点3:Redis持久化配置三:性能
大数据面试必备:Kafka性能优化 Producer与Consumer配置指南
Kafka面试题-在Kafka中,如何通过配置优化Producer和Consumer的性能?回答重点在Kafka中,通过优化Producer和Consumer的配置,可以显著提高性能。以下是一些关键配置项和策略:1、Producer端优化:batch.size:批处理大小。增大batch.size可以使Producer每次发送更多的消息,但要注意不能无限制增大,否则会导致内存占用过多。linger
技术调研:时序数据库(一)
myskybeyond
时序数据库 时序数据库 数据库
选择时序数据库时,选择当下主流的解决方案。目前主流的开源解决方案有InfluxDB、TDengine和TimescaleDB。下文从多个维度对比分析,最终根据需求做出选型决策。1.核心架构与设计理念数据库架构特点核心优势InfluxDB-专为时序数据设计的分布式数据库-基于时间线(TimeSeries)模型-开源版(OSS)与商业版(Cloud/Enterprise)功能差异大高写入吞吐量、原生支
高可用与低成本兼得:全面解析 TDengine 时序数据库双活与双副本
TDengine (老段)
TDengine 案例分析 时序数据库 tdengine 大数据 涛思数据 数据库 物联网 iot
在现代数据管理中,企业对于可靠性、可用性和成本的平衡有着多样化的需求。为此,TDengine在3.3.0.0版本中推出了两种不同的企业级解决方案:双活方案和基于仲裁者的双副本方案,以满足不同应用场景下的特殊需求。本文将详细探讨这两种方案的适用场景、技术特点及其最佳实践,让大家深入了解这两大方案如何帮助企业在高效可靠的数据存储和管理中取得成功。TDengine双副本(+仲裁者)为了满足部分客户在保证
图扑软件智慧云展厅,开启数字化展馆新模式
智慧园区
可视化 5g 人工智能 大数据 安全 云计算
随着疫情的影响以及新兴技术的不断发展,展会的发展形式也逐渐从线下转向线上。通过“云”上启动、云端互动、双线共频的形式开展。通过应用大数据、人工智能、沉浸式交互等多重技术手段,构建数据共享、信息互通、精准匹配的高精度“云展厅”,突破时空壁垒限制。图扑软件运用HT强大的渲染功能,数字孪生“云展位”,1:1复现实际展厅内部独特的结构造型和建筑特色。也可以第一人称视角漫游,模拟用户在展厅内的参观场景,在保
TDengine 3.3.5.0 新功能 —— 查看库文件占用空间、压缩率
TDengine (老段)
TDengine 产品设计 数据库 时序数据库 物联网 tdengine 涛思数据 iot
1.背景TDengine之前版本一直没有通过SQL命令查看数据库占用的磁盘空间大小,从3.3.5.0开始,增加了这个方便且实用的小功能,这里详细介绍下。2.SQL基本语法selectexprfrominformation_schema.ins_disk_usage[wherecondtion]行为说明:查看各个vgroup的各个组件磁盘占用情况,并且可以通过查询语句计算压缩率等。示例:taos>s
区块链技术概述:从比特币到Web3.0
闲人编程
Python区块链50讲 区块链 web3 python 元宇宙 比特币 安全
目录区块链技术概述:从比特币到Web3.0引言:数字革命的下一篇章1.区块链技术基础1.1区块链定义与核心特征1.2区块链数据结构可视化2.比特币:区块链的开端2.1比特币的核心创新2.2比特币交易生命周期3.以太坊与智能合约革命3.1以太坊的核心创新3.2智能合约执行流程4.Web3.0:互联网的新范式4.1Web3.0的核心特征4.2Web3技术栈5.Python实现简易区块链系统5.1区块类
【Python常用模块】_Pandas模块3-DataFrame对象
失心疯_2023
Python常用模块 数据分析 pandas 数据挖掘 python 数据统计 数据处理
课程推荐我的个人主页:失心疯的个人主页入门教程推荐:Python零基础入门教程合集虚拟环境搭建:Python项目虚拟环境(超详细讲解)PyQt5系列教程:PythonGUI(PyQt5)教程合集Oracle数据库教程:Oracle数据库教程合集MySQL数据库教程:MySQL数据库教程合集优质资源下载:资源下载合集
使用 C 语言操作 MySQL 实现图片写入与读取
(Charon)
mysql 数据库
在实际项目中,常常需要将图片或文件以二进制方式存储至数据库中,并能正确读取还原为文件。本文以C语言配合MySQLCAPI为例,完整演示如何实现将一张JPG图片写入数据库并再读出生成新图片文件的过程。项目背景我们使用如下表结构:--创建用户信息表CREATETABLETBL_USER(U_IDINTPRIMARYKEYAUTO_INCREMENT,--用户编号,整型,主键,自动递增,系统自动分配唯一
深入剖析Redis高性能的原因,IO多路复用模型,Redis数据迁移,分布式锁实现
一、深入剖析Redis单线程处理命令仍具备高性能的原因Redis虽然是单线程处理命令的(主线程负责网络I/O和命令处理),但它依然具备百万级QPS的吞吐能力。这个看似矛盾的现象,其实是Redis高性能架构设计和底层实现精妙配合的结果。下面我们从架构、内核原理、操作系统机制、与其他系统对比等多维度深入剖析,为何Redis单线程却读写性能极高。1.Redis是“单线程处理命令”,但不是完全单线程模块是
Cursor MySQL MCP 完整操作配置指南
z日火
开发分享 mcp cursor mysql
概述本指南帮助您在Windows环境下配置Cursor编辑器的MySQLMCP服务器,实现通过AI助手对数据库进行完整的增删改查操作。功能特性:✅自然语言数据库查询✅智能数据插入和更新✅安全的数据删除操作✅自动数据分析和报告生成快速配置1.环境检查#检查必要组件node--version#Node.js>=16mysql--version#MySQL5.7+cursor--version#Curs
C# 中 EventWaitHandle 实现多进程状态同步的深度解析
Leon@Lee
c# 开发语言
在现代软件开发中,多进程应用场景日益普遍。无论是分布式系统、微服务架构,还是传统的客户端-服务器模型,进程间的状态同步都是一个关键挑战。C#提供了多种同步原语,其中EventWaitHandle是一个强大的工具,特别适合处理跨进程的同步需求。本文将深入探讨EventWaitHandle的工作原理、使用场景及最佳实践。一、EventWaitHandle基础原理EventWaitHandle是.NET
Golang cron 定时任务完全指南:从入门到精通
Golang编程笔记
Golang编程笔记 Golang开发实战 golang wpf 开发语言 ai
Golangcron定时任务完全指南:从入门到精通关键词:Golang、cron、定时任务、任务调度、并发处理、分布式任务、最佳实践摘要:本文将全面介绍Golang中实现cron定时任务的各个方面,从基础概念到高级应用,涵盖标准库使用、第三方库对比、并发处理、分布式任务调度等核心内容。我们将通过详细的代码示例、架构图解和实际应用场景分析,帮助开发者掌握在Golang中构建可靠、高效的定时任务系统的
【C++】命令模式
目录一、模式核心概念与结构二、C++实现示例:遥控器与家电控制三、命令模式的关键特性四、应用场景五、命令模式与其他设计模式的关系六、C++标准库中的命令模式应用七、优缺点分析八、实战案例:数据库事务命令九、实现注意事项如果这篇文章对你有所帮助,渴望获得你的一个点赞!命令模式(CommandPattern)是一种【行为型】设计模式,它将请求封装为对象,从而使你可以用不同的请求对客户端进行参数化,对请
mybatis批量插入数据时,如果是sql server库只返回一条自增主键
小小不吃香菜
mybatis sqlserver java
有个功能需要做个批量插入,表是自增主键,本来是很简单的事情,结果一测试发现一个神奇的事情,由于数据库是sqlserver的,插入一条时,id可以正常返回,多条时,就出现了标题的问题,只返回一个id,使用的是mybatis自带的jar包,甚至如何使用人家还加了备注在里面,很清晰,是这样的:然后我就按照上面描述的,自己加了一个自定义的Mapper,把主键名称改成我自己的,然后发现依然只能获取到一条,后
10招提升SQL性能的实战技巧
快乐才是自己的
sql mysql sql mysql oracle database hadoop 大数据
SQL语句常见性能优化方案在数据库应用中,SQL性能优化是核心技术要点。以下是经过验证的优化策略,按关键维度分类:一、索引优化精准索引覆盖对高频查询的WHERE、JOIN、ORDERBY字段建立索引复合索引遵循最左前缀原则:索引(a,b,c)仅支持WHEREa=?或WHEREa=?ANDb=?示例:将SELECT*FROMordersWHEREstatus='shipped'改为CREATEIND
java毕业设计房产中介系统mybatis+源码+调试部署+系统+数据库+lw
兮兮科技
java mybatis 开发语言
java毕业设计房产中介系统mybatis+源码+调试部署+系统+数据库+lwjava毕业设计房产中介系统mybatis+源码+调试部署+系统+数据库+lw本源码技术栈:项目架构:B/S架构开发语言:Java语言开发软件:ideaeclipse前端技术:Layui、HTML、CSS、JS、JQuery等技术后端技术:JAVA运行环境:Win10、JDK1.8数据库:MySQL5.7/8.0源码地址
vue大数据量列表渲染性能优化:虚拟滚动原理
Java小卷
Vue3开源组件实战 vue3 自定义Tree 虚拟滚动
前面咱完成了自定义JuanTree组件各种功能的实现。在数据量很大的情况下,我们讲了两种实现方式来提高渲染性能:前端分页和节点数据懒加载。前端分页小节:Vue3扁平化Tree组件的前端分页实现节点数据懒加载小节:ElementTreePlus版功能演示:数据懒加载关于扁平化结构Tree和嵌套结构Tree组件的渲染嵌套结构的Tree组件是一种递归渲染,性能上比起列表结构的v-for渲染比较一般。对于
MongoDB与Redis有哪些区别
相遇在春风里
经验分享
MongoDB和Redis是两种不同类型的数据库,它们存在以下区别:一、数据模型MongoDBMongoDB是一个文档型数据库,它使用BSON(BinaryJSON)格式存储数据。数据以类似JSON的文档形式组织,每个文档可以有不同的结构(即模式自由)。例如,在一个存储用户信息的集合中,一个用户文档可能包含姓名、年龄、地址等字段,而另一个用户文档可能还包含额外的兴趣爱好字段。这种数据模型非常适合处
redis的scan使用详解,结合spring使用详解
黑皮爱学习
redis自学笔记 redis spring 数据库
Redis的SCAN命令是一种非阻塞的迭代器,用于逐步遍历数据库中的键,特别适合处理大数据库。下面详细介绍其使用方法及在Spring框架中的集成方式。SCAN命令基础SCAN命令的基本语法:SCANcursor[MATCHpattern][COUNTcount]cursor:迭代游标,初始为0,每次迭代返回新的游标值。MATCHpattern:可选,用于过滤键的模式(如user:*)。COUNTc
mongodb和redis的区别:
huangbfeng
mongodb redis 数据库
1、内存管理机制Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据。MongoDB数据存在内存,由linux系统mmap实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。2、支持的数据结构Redis支持的数据结构丰富,包括hash、set、list等。MongoDB数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常
数据库系统工程师简要概括笔记
Mint_Datazzh
数据库系统工程师 数据库 笔记 数据库系统工程师
文章内容仅为粗略总结知识,便于个人复习思考原文链接:数据库系统工程师简要概括笔记–笔墨云烟数据库系统工程师—1.1计算机硬件基础知识数据库系统工程师—1.2计算机体系结构与存储系统数据库系统工程师—1.3安全性、可靠性与系统性能评测基础知识数据库系统工程师—2.程序语言基础知识数据库系统工程师—3.1~3.4线性结构、数组和矩阵、树和二叉树、图数据库系统工程师—3.5排序算法数据库系统工程师—3.
MongoDB框架零基础入门
码农研究僧
Python 100天精通全栈 mongodb nosql 数据库
目录前言1.安装配置2.关启配置3.基本概念4.基本操作4.1创建集合4.2删除集合4.3插入文档4.4更新文档4.5删除文档4.6查询文档前言先科普讲解一下NoSQL(notonlysql)本身NoSQL非关系型数据库就具备了ACID(原子性、一致性、持久性、隔离性)数据持久化一般还是要使用关系型数据库,内存的数据库使用检索MongoDB是C++编写,一个基于分布式文件存储的开源数据库系统。将其
Java/Kotlin 主线程IO操作全方位监控指南(实战代码+性能优化)
时小雨
Android实战与技巧 android kotlin
本文涵盖从基础监控到高级诊断的全套解决方案,包含10+个可直接落地的代码示例一、为什么需要监控主线程IO?主线程IO阻塞会导致界面卡顿、响应延迟等严重问题。典型场景:文件读写阻塞UI渲染网络请求未使用异步线程数据库查询未优化日志输出同步阻塞二、代码级监控方案(Kotlin实现)1.装饰器模式监控流操作classMonitoredInputStream(privatevalorigin:InputS
用Python实现生信分析——功能预测详解
写代码的M教授
生信分析 python 开发语言
功能预测是生物信息学中的一项重要任务,通过分析基因或蛋白质序列的特征,推测它们的生物学功能。功能预测通常涉及多种方法,包括序列比对、基序识别、机器学习模型等。这些方法可以帮助科学家推断未知基因的功能,从而加速生物学研究的进展。1.功能预测的主要方法(1)同源性比对:通过将未知基因或蛋白质序列与数据库中的已知序列进行比对,识别出同源序列,并推测它们的功能。常用工具包括BLAST、HMMER等。(2)
用Python实现生信分析——序列搜索和比对工具详解
写代码的M教授
生信分析 python
1.什么是序列搜索和比对工具?序列搜索和比对工具在生物信息学中用于在大型序列数据库中搜索与查询序列相似的序列,并进行比对分析。这些工具可以帮助研究人员识别与目标序列相关的已知序列,从而推测其功能、结构和进化关系。常见的序列搜索和比对工具包括:BLAST(BasicLocalAlignmentSearchTool):最常用的序列搜索工具,能够快速找到与查询序列相似的序列。FASTA:另一个常用的序列
数据库设计和功能需求分析------后台设计概述
qq_41490913
java 数据库
功能需求分析和数据库设计不论是Web开发还是Android开发,在设计后台的时候我们都要做的重要的事情不外乎两点:1.需求分析;2.数据库表格的设计。在进行这两项工作的过程中,第一项工作对第二项起着非常重要的作用,我们只有真正的搞清楚了业务需求以及业务逻辑,找到了功能模块之间在后台数据库关联的抽象模型,这样才能确定数据库应该有几张表,每张表有哪些字段,表与表之间该如何联系。需求分析与功能模块设计一
PostgreSQL 容器化分布式技术方案
TechVision大咖圈
postgresql 分布式 数据库 分布式数据库
目录引言:为什么选择容器化PostgreSQLPostgreSQL容器化基础分布式架构设计高可用实现方案读写分离架构动态扩缩容策略生产环境实践总结与展望引言:为什么选择容器化PostgreSQL在数字化转型的浪潮中,数据库作为企业的"心脏",其稳定性和扩展性直接影响着业务的成败。PostgreSQL作为世界上最先进的开源关系型数据库,配合容器化技术,就像是给数据库插上了翅膀——既保持了数据的可靠性
mysql之jdbc连接数据库和sql注入的问题
一,概述可能是自己的记忆力太差了,经常忘记一些很重要的知识点,记得个大概,等要用的时候就去找,结果还找不到。干脆,记博客里,怎么都找的到。这篇博客主要就是关于Jdbc(javadatabaseconnectivity)和MySql的,记录如何连接数据库及插入数据等等。二,工具及准备工作MyEclipse10,mysql驱动jar包(我用的是这个版本mysql-connector-java-5.0.
ztree异步加载
3213213333332132
JavaScript Ajax json Web ztree
相信新手用ztree的时候,对异步加载会有些困惑,我开始的时候也是看了API花了些时间才搞定了异步加载,在这里分享给大家。
我后台代码生成的是json格式的数据,数据大家按各自的需求生成,这里只给出前端的代码。
设置setting,这里只关注async属性的配置
var setting = {
//异步加载配置
thirft rpc 具体调用流程
BlueSkator
中间件 rpc thrift
Thrift调用过程中,Thrift客户端和服务器之间主要用到传输层类、协议层类和处理类三个主要的核心类,这三个类的相互协作共同完成rpc的整个调用过程。在调用过程中将按照以下顺序进行协同工作:
(1) 将客户端程序调用的函数名和参数传递给协议层(TProtocol),协议
异或运算推导, 交换数据
dcj3sjt126com
PHP 异或 ^
/*
* 5 0101
* 9 1010
*
* 5 ^ 5
* 0101
* 0101
* -----
* 0000
* 得出第一个规律: 相同的数进行异或, 结果是0
*
* 9 ^ 5 ^ 6
* 1010
* 0101
* ----
* 1111
*
* 1111
* 0110
* ----
* 1001
事件源对象
周华华
JavaScript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
MySql配置及相关命令
g21121
mysql
MySQL安装完毕后我们需要对它进行一些设置及性能优化,主要包括字符集设置,启动设置,连接优化,表优化,分区优化等等。
一 修改MySQL密码及用户
 
[简单]poi删除excel 2007超链接
53873039oycg
Excel
采用解析sheet.xml方式删除超链接,缺点是要打开文件2次,代码如下:
public void removeExcel2007AllHyperLink(String filePath) throws Exception {
OPCPackage ocPkg = OPCPac
Struts2添加 open flash chart
云端月影
准备以下开源项目:
1. Struts 2.1.6
2. Open Flash Chart 2 Version 2 Lug Wyrm Charmer (28th, July 2009)
3. jofc2,这东西不知道是没做好还是什么意思,好像和ofc2不怎么匹配,最好下源码,有什么问题直接改。
4. log4j
用eclipse新建动态网站,取名OFC2Demo,将Struts2 l
spring包详解
aijuans
spring
下载的spring包中文件及各种包众多,在项目中往往只有部分是我们必须的,如果不清楚什么时候需要什么包的话,看看下面就知道了。 aspectj目录下是在Spring框架下使用aspectj的源代码和测试程序文件。Aspectj是java最早的提供AOP的应用框架。 dist 目录下是Spring 的发布包,关于发布包下面会详细进行说明。 docs&nb
网站推广之seo概念
antonyup_2006
算法 Web 应用服务器 搜索引擎 Google
持续开发一年多的b2c网站终于在08年10月23日上线了。作为开发人员的我在修改bug的同时,准备了解下网站的推广分析策略。
所谓网站推广,目的在于让尽可能多的潜在用户了解并访问网站,通过网站获得有关产品和服务等信息,为最终形成购买决策提供支持。
网站推广策略有很多,seo,email,adv
单例模式,sql注入,序列
百合不是茶
单例模式 序列 sql注入 预编译
序列在前面写过有关的博客,也有过总结,但是今天在做一个JDBC操作数据库的相关内容时 需要使用序列创建一个自增长的字段 居然不会了,所以将序列写在本篇的前面
1,序列是一个保存数据连续的增长的一种方式;
序列的创建;
CREATE SEQUENCE seq_pro
2 INCREMENT BY 1 -- 每次加几个
3
Mockito单元测试实例
bijian1013
单元测试 mockito
Mockito单元测试实例:
public class SettingServiceTest {
private List<PersonDTO> personList = new ArrayList<PersonDTO>();
@InjectMocks
private SettingPojoService settin
精通Oracle10编程SQL(9)使用游标
bijian1013
oracle 数据库 plsql
/*
*使用游标
*/
--显示游标
--在显式游标中使用FETCH...INTO语句
DECLARE
CURSOR emp_cursor is
select ename,sal from emp where deptno=1;
v_ename emp.ename%TYPE;
v_sal emp.sal%TYPE;
begin
ope
【Java语言】动态代理
bit1129
java语言
JDK接口动态代理
JDK自带的动态代理通过动态的根据接口生成字节码(实现接口的一个具体类)的方式,为接口的实现类提供代理。被代理的对象和代理对象通过InvocationHandler建立关联
package com.tom;
import com.tom.model.User;
import com.tom.service.IUserService;
Java通信之URL通信基础
白糖_
java jdk webservice 网络协议 ITeye
java对网络通信以及提供了比较全面的jdk支持,java.net包能让程序员直接在程序中实现网络通信。
在技术日新月异的现在,我们能通过很多方式实现数据通信,比如webservice、url通信、socket通信等等,今天简单介绍下URL通信。
学习准备:建议首先学习java的IO基础知识
URL是统一资源定位器的简写,URL可以访问Internet和www,可以通过url
博弈Java讲义 - Java线程同步 (1)
boyitech
java 多线程 同步 锁
在并发编程中经常会碰到多个执行线程共享资源的问题。例如多个线程同时读写文件,共用数据库连接,全局的计数器等。如果不处理好多线程之间的同步问题很容易引起状态不一致或者其他的错误。
同步不仅可以阻止一个线程看到对象处于不一致的状态,它还可以保证进入同步方法或者块的每个线程,都看到由同一锁保护的之前所有的修改结果。处理同步的关键就是要正确的识别临界条件(cri
java-给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。
bylijinnan
java
public class DeleteExtraSpace {
/**
* 题目:给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。
* 方法1.用已有的String类的trim和replaceAll方法
* 方法2.全部用正则表达式,这个我不熟
* 方法3.“重新发明轮子”,从头遍历一次
*/
public static v
An error has occurred.See the log file错误解决!
Kai_Ge
MyEclipse
今天早上打开MyEclipse时,自动关闭!弹出An error has occurred.See the log file错误提示!
很郁闷昨天启动和关闭还好着!!!打开几次依然报此错误,确定不是眼花了!
打开日志文件!找到当日错误文件内容:
--------------------------------------------------------------------------
[矿业与工业]修建一个空间矿床开采站要多少钱?
comsci
地球上的钛金属矿藏已经接近枯竭...........
我们在冥王星的一颗卫星上面发现一些具有开采价值的矿床.....
那么,现在要编制一个预算,提交给财政部门..
解析Google Map Routes
dai_lm
google api
为了获得从A点到B点的路劲,经常会使用Google提供的API,例如
[url]
http://maps.googleapis.com/maps/api/directions/json?origin=40.7144,-74.0060&destination=47.6063,-122.3204&sensor=false
[/url]
从返回的结果上,大致可以了解应该怎么走,但
SQL还有多少“理所应当”?
datamachine
sql
转贴存档,原帖地址:http://blog.chinaunix.net/uid-29242841-id-3968998.html、http://blog.chinaunix.net/uid-29242841-id-3971046.html!
------------------------------------华丽的分割线--------------------------------
Yii使用Ajax验证时,如何设置某些字段不需要验证
dcj3sjt126com
Ajax yii
经常像你注册页面,你可能非常希望只需要Ajax去验证用户名和Email,而不需要使用Ajax再去验证密码,默认如果你使用Yii 内置的ajax验证Form,例如:
$form=$this->beginWidget('CActiveForm', array( 'id'=>'usuario-form',&
使用git同步网站代码
dcj3sjt126com
crontab git
转自:http://ued.ctrip.com/blog/?p=3646?tn=gongxinjun.com
管理一网站,最开始使用的虚拟空间,采用提供商支持的ftp上传网站文件,后换用vps,vps可以自己搭建ftp的,但是懒得搞,直接使用scp传输文件到服务器,现在需要更新文件到服务器,使用scp真的很烦。发现本人就职的公司,采用的git+rsync的方式来管理、同步代码,遂
sql基本操作
蕃薯耀
sql sql基本操作 sql常用操作
sql基本操作
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年6月1日 17:30:33 星期一
&
Spring4+Hibernate4+Atomikos3.3多数据源事务管理
hanqunfeng
Hibernate4
Spring3+后不再对JTOM提供支持,所以可以改用Atomikos管理多数据源事务。Spring2.5+Hibernate3+JTOM参考:http://hanqunfeng.iteye.com/blog/1554251Atomikos官网网站:http://www.atomikos.com/ 一.pom.xml
<dependency>
<
jquery中两个值得注意的方法one()和trigger()方法
jackyrong
trigger
在jquery中,有两个值得注意但容易忽视的方法,分别是one()方法和trigger()方法,这是从国内作者<<jquery权威指南》一书中看到不错的介绍
1) one方法
one方法的功能是让所选定的元素绑定一个仅触发一次的处理函数,格式为
one(type,${data},fn)
&nb
拿工资不仅仅是让你写代码的
lampcy
工作 面试 咨询
这是我对团队每个新进员工说的第一件事情。这句话的意思是,我并不关心你是如何快速完成任务的,哪怕代码很差,只要它像救生艇通气门一样管用就行。这句话也是我最喜欢的座右铭之一。
这个说法其实很合理:我们的工作是思考客户提出的问题,然后制定解决方案。思考第一,代码第二,公司请我们的最终目的不是写代码,而是想出解决方案。
话粗理不粗。
付你薪水不是让你来思考的,也不是让你来写代码的,你的目的是交付产品
架构师之对象操作----------对象的效率复制和判断是否全为空
nannan408
架构师
1.前言。
如题。
2.代码。
(1)对象的复制,比spring的beanCopier在大并发下效率要高,利用net.sf.cglib.beans.BeanCopier
Src src=new Src();
BeanCopier beanCopier = BeanCopier.create(Src.class, Des.class, false);
ajax 被缓存的解决方案
Rainbow702
JavaScript jquery Ajax cache 缓存
使用jquery的ajax来发送请求进行局部刷新画面,各位可能都做过。
今天碰到一个奇怪的现象,就是,同一个ajax请求,在chrome中,不论发送多少次,都可以发送至服务器端,而不会被缓存。但是,换成在IE下的时候,发现,同一个ajax请求,会发生被缓存的情况,只有第一次才会被发送至服务器端,之后的不会再被发送。郁闷。
解决方法如下:
① 直接使用 JQuery提供的 “cache”参数,
修改date.toLocaleString()的警告
tntxia
String
我们在写程序的时候,经常要查看时间,所以我们经常会用到date.toLocaleString(),但是date.toLocaleString()是一个过时 的API,代替的方法如下:
package com.tntxia.htmlmaker.util;
import java.text.SimpleDateFormat;
import java.util.
项目完成后的小总结
xiaomiya
js 总结 项目
项目完成了,突然想做个总结但是有点无从下手了。
做之前对于客户端给的接口很模式。然而定义好了格式要求就如此的愉快了。
先说说项目主要实现的功能吧
1,按键精灵
2,获取行情数据
3,各种input输入条件判断
4,发送数据(有json格式和string格式)
5,获取预警条件列表和预警结果列表,
6,排序,
7,预警结果分页获取
8,导出文件(excel,text等)
9,修