首页 文章 精选 留言 我的

精选列表

搜索[分布式数据库],共1586篇文章
优秀的个人博客,低调大师

MPP分布式数据库性能评估方法 - 阿里云HybridDB for PostgreSQL最佳实践

背景 通常评估一个数据库的性能,可以选择工业标准测试,或者根据业务模型,建模进行测试。 例如PostgreSQL pgbench支持的tpc-b测试,以及自定义模型测试。 benchmarksql支持的tpc-c测试。 gp_tpch支持的tpc-h测试等等。 参考文档如下 《TPC-H测试 - PostgreSQL 10 vs Deepgreen(Greenplum)》 《PostgreSQL 使用 pgbench 测试 sysbench 相关case》 《PostgreSQL pgbench SQL RT 与 事务RT 浅析》 《数据库界的华山论剑 tpc.org》 但是这些都是在构建了数据库之后才可以进行的测试,在构建数据库系统之前,如何评估性能呢? 哪些硬件指标决定了数据库性能 这些硬件指标是数据库性能的主要影响因素 CPU主频 CPU指

优秀的个人博客,低调大师

基于Hadoop分布式数据库HBase1.0部署及使用

HMaster主要负责Table和Region管理工作: 1. 管理用户对Table的增、删、改、查操作 2. 管理HRegionServer的负载均衡,调整Region分布 3. 在Region Split后,负责新Region的分配 4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移 HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据。 HBase工作原理: HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个ColumnFamily中,这样最高效。 HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是SortedMemory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。 在理解了上述HStore的基本原理后,还必须了解一下HLog的功能,因为上述的HStore在系统正常工作的前提下是没有问题的,但是在分布式系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegionServer中都有一个HLog对象,HLog是一个实现WriteAhead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。 HBase高可用实现方式: HBase同样分为Active和Standby,把数据存储在Zookeeper,可以启动两个或多个HMaster服务进程,第一个启动的做为HBase活动节点,其余的作为备用节点。如果一台故障,Zookeeper会选择出备用节点成为活动节点,让他接管故障的活动节点任务,保证总有一个Master运行。 二、HBase安装与配置(每台都要配置) 1.安装配置 1 2 3 4 5 #tarzxvfhbase-1.0.1.1-bin.tar.gz #mvhbase-1.0.1.1/opt #vihbase-env.sh export JAVA_HOME= /usr/local/jdk1 .7 export HBASE_MANAGES_ZK= false #关闭通过内置Zookeeper管理HBase 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #vihbase-site.xml <configuration> <!--HBase数据目录位置--> <property> <name>hbase.rootdir< /name > <value>hdfs: //hcluster/hbase < /value > < /property > <!--启用分布式集群--> <property> <name>hbase.cluster.distributed< /name > <value> true < /value > < /property > <!--默认HMasterHTTP访问端口--> <property> <name>hbase.master.info.port< /name > <value>16010< /value > < /property > <!--默认HRegionServerHTTP访问端口--> <property> <name>hbase.regionserver.info.port< /name > <value>16030< /value > < /property > <!--不使用默认内置的,配置独立的ZK集群地址--> <property> <name>hbase.zookeeper.quorum< /name > <value>HSlave0,HSlave1,HSlave2< /value > < /property > < /configuration > 1 2 3 4 #viregionservers HSlave0 HSlave1 HSlave2 2. 配置系统变量 1 2 3 4 5 #vi/etc/profile HBASE_HOME= /opt/hbase-1 .0.1.1 PATH=$PATH:$HBASE_HOME /bin export HBASE_HOMEPATH #source/etc/profile 3. 启动HBase 分别在HMaster0和HMaster1启动hmaster: 1 #start-hbase.sh 分别在 HSlave0/1/2启动HRegionServer: 1 #hbase-daemon.shstartregionserver 4. 检查是否启动成功 在主备节点查看有HMaster进程说明成功: 1 2 3 4 5 6 [root@HMaster0~] #jps 2615DFSZKFailoverController 30027ResourceManager 29656NameNode 2841HMaster 8448Jps 在RegionServer节点查看有HRegionServer进程说明成功: 1 2 3 4 5 6 7 [root@HSlave0~] #jps 11391NodeManager 11213DataNode 11298JournalNode 10934QuorumPeerMain 12571HRegionServer 7005Jps 通过访问WEB页面查看: 5. hbase shell常用操作命令 根据下面tb1表的结构来演示hbase增删改查用法: name info address sex age zhangsan 22 man beijing lisi 23 woman shanghai # hbase shell #进入字符页面 5.1 创建表tb1,并有两个列族name、info和address,info列族下有sex和age列 1 hbase(main):024:0>create 'tb1' , 'name' , 'info' , 'address' 5.2 查看表结构 1 hbase(main):025:0>describe 'tb1' 5.3 列出所有表 1 hbase(main):025:0>list 5.4 插入几条记录 1 2 3 4 5 6 hbase(main):028:0>put 'tb1' , 'zhangsan' , 'info:sex' , '22' hbase(main):039:0>put 'tb1' , 'zhangsan' , 'info:age' , 'man' hbase(main):031:0>put 'tb1' , 'zhangsan' , 'address' , 'beijing' hbase(main):046:0>put 'tb1' , 'lisi' , 'info:age' , 'woman' hbase(main):047:0>put 'tb1' , 'lisi' , 'info:sex' , '23' hbase(main):048:0>put 'tb1' , 'lisi' , 'address' , 'shanghai' 5.5 查看所有记录(全表扫描) 1 2 3 4 5 hbase(main):040:0>scan 'tb1' ROWCOLUMN+CELL zhangsancolumn=address:,timestamp=1435129009088,value=beijing zhangsancolumn=info:age,timestamp=1435129054098,value= man zhangsancolumn=info:sex,timestamp=1435128714392,value=22 说明: ROW:行,用来检索记录的主键。 COLUMN family:列族,是表的一部分,必须在创建表时定义,可以看到列名是以列族作为前缀,一个列族可以有多个列(column)。 CELL:存储单位,存储实际数据,也就是所看到的value,cell中没有数据类型,全部是字节码形式存储。 timestamp:时间戳,可以看做是数据版本号,hbase写时自动赋值,为当前系统时间,精确到毫秒。如果每个cell保存同一份数据多个版本时,可通过时间戳来索引版本。 5.6 统计表中记录总数 1 2 3 4 hbase(main):050:0>count 'tb1' 2row(s) in 0.0190seconds =>2 5.7 查看表中某条记录 1 2 3 4 5 6 hbase(main):054:0>get 'tb1' , 'zhangsan' hbase(main):054:0>get 'tb1' , 'zhangsan' COLUMNCELL address:timestamp=1435129096397,value=beijing info:agetimestamp=1435129054098,value= man info:sextimestamp=1435128714392,value=22 5.8 查看表中某行某列族中的所有数据 1 2 3 4 hbase(main):055:0>get 'tb1' , 'zhangsan' , 'info' COLUMNCELL info:agetimestamp=1435129054098,value= man info:sextimestamp=1435128714392,value=22 5.9 更新一条记录(覆盖) 1 2 hbase(main):063:0>put 'tb1' , 'zhangsan' , 'info:sex' , '23' 0row(s) in 0.0080seconds 6.0 给lisi增加一个comment字段 1 hbase(main):070:0>incr 'tb1' , 'lisi' , 'info:comment' 6.1 删除某行某列族数据 1 hbase(main):065:0>delete 'tb1' , 'zhangsan' , 'info:sex' 6.2 删除某行所有记录 1 hbase(main):067:0>deleteall 'tb1' , 'zhangsan' 6.3 删除一个表 1 2 hbase(main):072:0>disable 'tb1' #先禁用 hbase(main):073:0>drop 'tb1' #再删除

优秀的个人博客,低调大师

云原生数据库-浪潮云溪分布式数据库SST文件结构

LSM tree保证数据库是有序写入(memtable-skiplist),起高了写性能,但是因为其本身的分层结构,牺牲了读性能(一个key如存储在了低级别的level,从上到下每一层都要进行查找,代价极大)。所以,针对读的性能提升有了很多的优化:bloom filter (高校判读一个key是否不存在),index-filter(二分查找,消耗低内存的情况下)所以key-value数据。这一些数据库都需要存储在SST文件之中,用来进行k-v数据的有序管理。 SST文件格式概览 1)Footer : 固定48字节,指出 IndexBlock 和 MetaIndexBlock 在文件中的偏移量信息,它是元信息的元信息,它位于 sstable 文件的尾部 2)IndexBlock:占用一个 block 空间,记录了 DataBlock 相关的元信息 3)MetaIndexBlock:占用一个 block 空间,各个元信息的Block,包括Filter、Properties(整个table的属性信息)、Compression dictionary、Range deletion tombstone 4)MetaBlock:可能占用多个 block空间,存储布隆过滤器的二进制数据 及其他元信息数据 5)DataBlock:可能占用多个 block空间,存储实际的数据即键值对内容 Footer 结构 Footer固定48个字节大小,位于SSTable文件尾部;MetaBlockIndex和DataBlockIndex的offset和size组成BlockHandlel类型,用于寻址MetaBlockIndex和DataBlcokIndex的块所在的位置,size和offset采用varint变长编码,以节省空间,offset和size最少占用1个字节长度、最多占用9个字节长度,因此MetaBlockIndex和DataBlockIndex的offset和size最多占用4*9=36个字节,通过padding补齐到40个字节(8字节对齐);比如DataBlockIndex.offset = 64、DataBlockIndex.size=216,表示DataBlockIndex位于SSTable文件的第64个字节至280个字节。 Block 结构 5个部分的数据结构,除了 Footer,其他的物理结构都是 Block 形式。每个 Block 对应物理磁盘的一个存储块,因此, Block 的大小与磁盘存储块的大小一致.这也是Footer放到文件末尾的原因,Footer本身48个字节不能占用一个磁盘存储块.Block 在硬盘上存储的时候,会在实际数据之后加上5个字节的额外内容:compression type、crc。 Data Block 结构 DataBlcok Key 的存储采用了前缀压缩机制,前缀压缩,就是对于 key 的相同前缀,尽量只存储一次以节省空间。但是对于 SSTable 来说它并不是对整个 block 的所有 key 进行一次性地前缀压缩,而是设置了很多区段,处于同一区段的 key 进行一次前缀压缩,每个区段的起点就是一个重启点。前缀压缩机制导致每条记录需要记住它对应的 key 的共享长度和非共享长度。所 谓 key 的共享长度,是指当前这条记录的 key 与上一条记录的 key 公共前缀的长 度,非共享长度则是去掉相同部分后的不同部分的长度。这样当前这条记录只需要存储不同的那部分 key 的值即可。 第一部分(Entry)用来存储key-value数据。由于sstable中所有的key-value对都是严格按序存储的,用了节省存储空间,并不会为每一对key-value对都存储完整的key值,而是存储与上一个key非共享的部分,避免了key重复内容的存储。每间隔若干个key-value对,将为该条记录重新存储一个完整的key。重复该过程(默认间隔值为16),每个重新存储完整key的点称之为Restart point。 Restart point的目的是在读取sstable内容时,加速查找的过程。由于每个Restart point存储的都是完整的key值,因此在sstable中进行数据查找时,可以首先利用restart point点的数据进行键值比较,以便于快速定位目标数据所在的区域;当确定目标数据所在区域时,再依次对区间内所有数据项逐项比较key值,进行细粒度地查找;该思想有点类似于跳表中利用高层数据迅速定位,底层数据详细查找的理念,降低查找的复杂度。 KV 数据存储结构 shared key length: 与 restart point 相同的key前缀字节长度. unshared key length: 当前key减去restart point 相同前缀长度后,剩余的字节长度 value length: 数值的字节长度 unshared key content: key与restart point中的key不相同部分的key内容. value: 存储真实的数值 Index Block 结构 index block包含若干条记录,每一条记录代表一个data block的索引信息,用于快速定位到包含特定key的Data Block;Index Block首先是一个block,因此包含三部分KeyValue、Type(固定1字节)、CRC检验码(固定4字节);Type标识该部分数据是否采用压缩算法,CRC是KeyValue + Type的检验码。 一条索引包括以下内容: key,取值是大于等于其索引block的最大key,并且小于下一个block的最小key; 该data block起始地址在sstable中的偏移量; 该data block的大小; IndexBlock和 DataBlock 一样,采取了前缀压缩,只不过间隔为2(DataBlock 默认为16)。 为什么key不是采用其索引的DataBlock的最大key? 主要目的是节省空间;假设其索引的block的最大key为"acknowledge",下一个block最小的key为"apple",如果DataBlockIndex的key采用其索引block的最大key,占用长度为len("acknowledge");采用后一种方式,key值可以为"ad"("acknowledge" < "ad" < "apple"),长度仅为2,并且检索效果是一样的。 为什么BlockHandle的offset和size的单位是字节数而不是block? 因为SSTable中的block大小是不固定的,虽然option中可以指定block_size参数,但SSTable中存储数据时,并未严格按照block_size对齐,所以offset和size指的是偏移字节数和长度字节数。这样做主要有两个原因: (1)可以存储任意长度的key和任意长度的value,而同一个key-value是不能跨block存储的,极端情况下,比如我们的单个 value 就很大,已经超过了 block_size,那么对于这种情况,SSTable 就没法进 行存储了。所以通常,实际的 Block 大小都是要略微大于 block_size 的; (2)从另外一个角度看,如果严格按照block_size对齐存储数据,必然有很多block通过补0的方式对齐,浪费存储空间。

优秀的个人博客,低调大师

传统应用层逻辑分库DB迁移阿里云DRDS+RDS分布式数据库

随着互联网快速发展,我们的结构化关系数据库在高并发、海量数据的情况下面临单机扩展性问题,首先是单机数据库容量瓶颈,单机数据库在业务高速增长的情况下依赖硬件升级也会到达天花板,并且使用成本变得非常高,而且扩展性的复杂性也是比较高,传统数据库扩容往往意味着服务中断,很难做到业务无感知或者少感知。 通过数据水平切换来现实分库可以帮助提升数据库整体性能、横向扩展性,切分后有效的降低了单台机器的访问负载,同时最大限度的降低了数据库服务节点宕机后的损失。 传统应用业务层逻辑或组件分库实现方式 应用和数据库按业务地域水平拆分 应用JDBC驱动层组件封装实现水平拆分 传统模式的分库我们看以看到有把系

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册