hbase 简介、HBASE重要概念、表Table、命名空间、Row Key,区域Region、列族、hbase shell命令行方式操作,命名空间操作

本文主要是介绍hbase 简介、HBASE重要概念、表Table、命名空间、Row Key,区域Region、列族、hbase shell命令行方式操作,命名空间操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 简介

HBase的名字的来源于Hadoop database,即hadoop数据库,不同于一般的关系数据库,它是非结构化数据存储的数据库,而且它是基于列的而不是基于行的模式。

HBase是一个分布式的、面向列的、基于Google Bigtable的开源实现。
利用Hadoop HDFS作为其文件存储系统,
利用Hadoop MapReduce来处理HBase中的海量数据,
利用Zookeeper作为协同服务。

2 HBase重要概念

HBase以表的形式存储数据。表是由行和列组成。列划分为若干个列族/列簇(column family),每个列族/列簇下面可以有多个普通列。
在这里插入图片描述

2.1 表Table

HBase是用表来存储数据的。

2.2 命名空间namespace

namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。
HBASE系统默认定义了两个缺省的namespace:

  • hbase:系统内建表,包含namespace和meta表
  • default:用户建表时未指定namespace的表都创建在此

2.3 Row key

行键,每一行的主键列,每行的行键要唯一,行键的值为任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在HBase内部,rowKey保存为字节数组byte[]
行的一次读写是原子操作 (不论一次读写多少列)

2.4 区域Region

Table在行的方向上分割为多个Region。

Region是按大小分割的,每个表开始只有一个region,随着数据的增多,region不断增大,当增大到一个阀值的时候,region就会等分为两个新的region,之后会有越来越多的region。

Region是HBase中分布式存储和负载均衡的最小单元。不同的Region分布到不同的RegionServer上。

Region由一个或者多个Store组成, 每个Store保存一个column family, 每个Store又由一个MemStore(存储在内存中)和0到多个StoreFile(存储在HDFS上)组成。
在这里插入图片描述

2.5 列族 column family

列族是每个子列的父级,每个子列都属于一个列族,一个列族包含一个或者多个相关列,创建表的时候需要指定列族,而列不需要必须指定。通过“列族名:列名”来表示某个具体的子列。

HBase中的Schema就是 TableName + Column Family Name

2.6 限定符

就是列族下的每个子列名称,或者称为相关列,或者称为限定符,只是翻译不同。
通过columnFamily:column来定位某个子列。

2.7 存储单元cell

我们外观看到的每个单元格其实都对应着多个存储单元,默认情况下一个单元格对应着一个存储单元,一个存储单元可以存储一份数据,如果一个单元格有多个存储单元就表示一个单元格可以存储多个值。可以通过version来设置存储单元个数。可以通过
rowKey + columnFamily + column + timestamp来唯一确定一个存储单元。cell中的数据是没有类型的,全部是字节码形式存贮。

hbase按照时间戳降序排列各时间版本,其他映射建按照升序排序。

2.8 时间戳版本号 timestamp

每个cell都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,hbase提供了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。

3 HBase Shell

命名描述语法
help ‘命令名’查看命令的使用描述help ‘命令名’
whoami我是谁whoami
version返回hbase集群的状态信息version
status返回hbase集群的状态信息status
table_help查看如何操作表status
create创建表create ‘表名’, ‘列族名1’, ‘列族名2’, ‘列族名N’
alter修改列族添加一个列族:alter ‘表名’, ‘列族名’ / 删除列族:alter ‘表名’, {NAME=> ‘列族名’, METHOD=> ‘delete’}
describe显示表相关的详细信息describe ‘表名’
list列出hbase中存在的所有表list
exists测试表是否存在exists ‘表名’
put添加或修改的表的值put ‘表名’, ‘行键’, ‘列族名’, ‘列值’ / put ‘表名’, ‘行键’, ‘列族名:列名’, ‘列值’
scan通过对表的扫描来获取对用的值scan ‘表名’ / 扫描某个列族: scan ‘表名’, {COLUMN=>‘列族名’} / 扫描某个列族的某个列: scan ‘表名’, {COLUMN=>‘列族名:列名’} / 查询同一个列族的多个列: scan ‘表名’, {COLUMNS => [ ‘列族名1:列名1’, ‘列族名1:列名2’, …]}
get获取行或单元(cell)的值get ‘表名’, ‘行键’ / get ‘表名’, ‘行键’, ‘列族名’
count统计表中行的数量count ‘表名’
incr增加指定表行或列的值incr ‘表名’, ‘行键’, ‘列族:列名’, 步长值
get_counter获取计数器get_counter ‘表名’, ‘行键’, ‘列族:列名’
delete删除指定对象的值(可以为表,行,列对应的值,另外也可以指定时间戳的值))删除列族的某个列: delete ‘表名’, ‘行键’, ‘列族名:列名’
deleteall删除指定行的所有元素值deleteall ‘表名’, ‘行键’
truncate重新创建指定表truncate ‘表名’
enable使表有效enable ‘表名’
is_enabled是否启用is_enabled ‘表名’
disable使表无效disable ‘表名’
is_enabled是否启用is_enabled ‘表名’
is_disabled是否无效is_disabled ‘表名’
drop删除表drop的表必须是disable的 / disable ‘表名’ / drop ‘表名’
shutdown关闭hbase集群(与exit不同)
tools列出hbase所支持的工具
exit退出

3.1 进入hbase命令行

cd  /home/tuzq/software/hbase-1.3.1/bin
./hbase shell

这里写图片描述

3.2 help查看帮助

这里写图片描述

3.3 status返回hbase集群的状态信息

显示集群状态status,可以为 ‘summary’, ‘simple’, ‘detailed’, or ‘replication’. 默认为 ‘summary’

hbase(main):006:0> status
1 active master, 0 backup masters, 2 servers, 0 dead, 31.0000 average load
hbase(main):011:0> status 'simaple'
1 active master, 0 backup masters, 2 servers, 0 dead, 31.0000 average load
Took 0.0478 seconds                                                                                                                        
hbase(main):012:0> status 'summary'
1 active master, 0 backup masters, 2 servers, 0 dead, 31.0000 average load
Took 0.0396 seconds                                                                                                                        
hbase(main):013:0> status 'replication'
version 2.0.2.3.1.4.0-315
2 live servershadoop4:SOURCE:SINK  : AgeOfLastAppliedOp=0, TimeStampsOfLastAppliedOp=Fri May 15 18:08:44 CST 2020hadoop5:SOURCE:SINK  : AgeOfLastAppliedOp=0, TimeStampsOfLastAppliedOp=Fri May 15 18:08:43 CST 2020
Took 0.0349 seconds                                                                                                                        
=> #<Java::JavaUtil::Collections::UnmodifiableSet:0x1109730f>
hbase(main):014:0> status 'replication', 'source'
version 2.0.2.3.1.4.0-315
2 live servershadoop4:SOURCE:hadoop5:SOURCE:
Took 0.0575 seconds                                                                                                                        
=> #<Java::JavaUtil::Collections::UnmodifiableSet:0x3ce7394f>
hbase(main):015:0> status 'replication','sink'
version 2.0.2.3.1.4.0-315
2 live servershadoop4:SINK  : AgeOfLastAppliedOp=0, TimeStampsOfLastAppliedOp=Fri May 15 18:08:44 CST 2020hadoop5:SINK  : AgeOfLastAppliedOp=0, TimeStampsOfLastAppliedOp=Fri May 15 18:08:43 CST 2020
Took 0.0504 seconds                                                                                                                        
=> #<Java::JavaUtil::Collections::UnmodifiableSet:0x68a426c3>
hbase(main):016:0>

3.4 list显示hbase中的表

list(列出你有哪些表)
这里写图片描述

3.5 disable,drop删除user

disable ‘user’
drop ‘user’

3.6 flush清空数据

flush ‘user’

3.7 create创建user表,包含info、data两个列族

create 'user', 'info', 'data'
create 'user', {NAME => 'info', VERSIONS => '3'}

这里写图片描述
这里写图片描述

3.8 describe显示表相关的详情信息

hbase(main):003:0> describe 'user'
Table user is ENABLED                                                                                                                      
user                                                                                                                                       
COLUMN FAMILIES DESCRIPTION                                                                                                                
{NAME => 'data', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_
DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'R
OW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSI
ON => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}                                                                                  
{NAME => 'info', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS => 'FALSE', CACHE_
DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'R
OW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSI
ON => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}                                                                                  
2 row(s)
Took 0.2026 seconds                                                                                                                        
hbase(main):004:0>

3.9 put向hbase表中插入信息

向user表中插入信息,row key为rk0001,列族info中添加name列标示符,值为zhangsan

put 'user', 'rk0001', 'info:name', 'zhangsan'

这里写图片描述
向user表中插入信息,row key为rk0001,列族info中添加gender列标示符,值为female

put 'user', 'rk0001', 'info:gender', 'male'

向user表中插入信息,row key为rk0001,列族info中添加age列标示符,值为20

put 'user', 'rk0001', 'info:age', 20
put 'user', 'rk0001', 'info:baby', 'anaglababy'

向user表中插入信息,row key为rk0001,列族data中添加pic列标示符,值为picture

put 'user', 'rk0002', 'data:pic', 'picture'

这里写图片描述

3.10 get 获取user表中row key为rk0001的所有信息

get 'namespaceName:tableName','rowKey','列族:列'get 'user', 'rk0001' (一次拿一行)

这里写图片描述

获取user表中row key为rk0001,info列族的所有信息

get 'user', 'rk0001', 'info'

这里写图片描述

获取user表中row key为rk0001,info列族的name、age列标示符的信息

get 'user', 'rk0001', 'info:name', 'info:age'

这里写图片描述

获取user表中row key为rk0001,info、data列族的信息

get 'user', 'rk0001', 'info', 'data'
get 'user', 'rk0001', {COLUMN => ['info', 'data']}

这里写图片描述
这里写图片描述

get 'user', 'rk0001', {COLUMN => ['info:name', 'data:pic']}

这里写图片描述
获取user表中row key为rk0001,列族为info,版本号最新5个的信息

get 'user', 'rk0001', {COLUMN => 'info', VERSIONS => 2}

这里写图片描述

get 'user', 'rk0001', {COLUMN => 'info:name', VERSIONS => 5}

这里写图片描述

get 'user', 'rk0001', {COLUMN => 'info:name', VERSIONS => 5, TIMERANGE => [1488892553804, 1488892688096]}

这里写图片描述
获取user表中row key为rk0001,cell的值为zhangsan的信息

get 'people', 'rk0001', {FILTER => "ValueFilter(=, 'binary:图片')"}

获取user表中row key为rk0001,列标示符中含有a的信息

get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

这里写图片描述

put 'user', 'rk0002', 'info:name', 'fanbingbing'
put 'user', 'rk0002', 'info:gender', 'female'
put 'user', 'rk0002', 'info:nationality', '中国'
get 'user', 'rk0002', {FILTER => "ValueFilter(=, 'binary:中国')"}

这里写图片描述

3.11 scan 查询user表中的所有信息

带有条数的scan

scan 'user', {LIMIT=>5}
scan 'namespaceName:tableName',{TIMERANGE => [1594201571000, 1594287971000]}
scan 'user'

这里写图片描述
查询user表中列族为info的信息

scan 'user', {COLUMNS => 'info'}

这里写图片描述

scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5}

这里写图片描述

scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 3}

这里写图片描述

查询user表中列族为info和data的信息

scan 'user', {COLUMNS => ['info', 'data']}

这里写图片描述

scan 'user', {COLUMNS => ['info:name', 'data:pic']}

这里写图片描述

查询user表中列族为info、列标示符为name的信息

scan 'user', {COLUMNS => 'info:name'}

这里写图片描述
查询user表中列族为info、列标示符为name的信息,并且版本最新的5个

scan 'user', {COLUMNS => 'info:name', VERSIONS => 5}

这里写图片描述
查询user表中列族为info和data且列标示符中含有a字符的信息

scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}

这里写图片描述

查询user表中列族为info,rk范围是[rk0001, rk0003)的数据

scan 'user', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

这里写图片描述

查询user表中row key以rk字符开头的

scan 'user',{FILTER=>"PrefixFilter('rk')"}

这里写图片描述

查询user表中指定范围的数据

scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}

3.12 delete删除数据

删除user表row key为rk0001,列标示符为info:name的数据

delete 'user', 'rk0001', 'info:name'

这里写图片描述

删除user表row key为rk0001,列标示符为info:name,timestamp为1392383705316的数据

delete 'user', 'rk0001', 'info:name', 1392383705316

3.13 truncate 清空user表中的数据

truncate 'user'

3.14 alter 修改表结构

3.14.1 disable 首先停用user表
disable 'user'

停用之后的表示无法操作的

添加两个列族f1和f2

alter 'people', NAME => 'f1'
alter 'user', NAME => 'f2'

3.15 enable 启用表

enable 'user'

测试:

hbase(main):009:0> put 'user','rk0001','f1:name','zhangsan'
0 row(s) in 0.0460 secondshbase(main):010:0> scan 'user'
ROW                                                 COLUMN+CELL                                                                                                                                         rk0001                                             column=data:pic, timestamp=1529293065769, value=picture                                                                                             rk0001                                             column=f1:name, timestamp=1529297704531, value=zhangsan                                                                                             rk0001                                             column=info:age, timestamp=1529292703053, value=20                                                                                                  rk0001                                             column=info:gender, timestamp=1529292652194, value=male                                                                                             rk0002                                             column=data:pic, timestamp=1529292913569, value=picture                                                                                             rk0002                                             column=info:gender, timestamp=1529295488032, value=female                                                                                           rk0002                                             column=info:name, timestamp=1529295421434, value=fanbingbing                                                                                        rk0002                                             column=info:nationality, timestamp=1529295956024, value=\xE4\xB8\xAD\xE5\x9B\xBD                                                                    
2 row(s) in 0.0120 seconds

其中disable ‘user’
删除一个列族:

alter 'user', NAME => 'f1', METHOD => 'delete' 或 alter 'user', 'delete' => 'f1'

案例:

hbase(main):001:0> alter 'user',NAME => 'f1',METHOD => 'delete'
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 3.0000 secondshbase(main):003:0> scan 'user'
ROW                                                 COLUMN+CELL                                                                                                                                         rk0001                                             column=data:pic, timestamp=1529293065769, value=picture                                                                                             rk0001                                             column=info:age, timestamp=1529292703053, value=20                                                                                                  rk0001                                             column=info:gender, timestamp=1529292652194, value=male                                                                                             rk0002                                             column=data:pic, timestamp=1529292913569, value=picture                                                                                             rk0002                                             column=info:gender, timestamp=1529295488032, value=female                                                                                           rk0002                                             column=info:name, timestamp=1529295421434, value=fanbingbing                                                                                        rk0002                                             column=info:nationality, timestamp=1529295956024, value=\xE4\xB8\xAD\xE5\x9B\xBD                                                                    
2 row(s) in 0.0510 secondshbase(main):004:0>

添加列族f1同时删除列族f2

alter 'user', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}

将user表的f1列族版本号改为5

alter 'people', NAME => 'info', VERSIONS => 5

启用表

enable 'user'

删除表

disable 'user'
drop 'user'get 'person', 'rk0001', {FILTER => "ValueFilter(=, 'binary:中国')"}
get 'person', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}
scan 'person', {COLUMNS => 'info:name'}
scan 'person', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"}
scan 'person', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'}scan 'person', {COLUMNS => 'info', STARTROW => '20140201', ENDROW => '20140301'}
scan 'person', {COLUMNS => 'info:name', TIMERANGE => [1395978233636, 1395987769587]}
delete 'person', 'rk0001', 'info:name'alter 'person', NAME => 'ffff'
alter 'person', NAME => 'info', VERSIONS => 10get 'user', 'rk0002', {COLUMN => ['info:name', 'data:pic']}

exists测试表是否存在

exit 退出Hbaseshell

3.16 统计表的条数

方式一:

hbase(main):005:0> count 'test1:fathers_info'   (不建议)

方式二:

[root@hadoop6 ~]# hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'namespaceName:tableName'

在这里插入图片描述

常用操作之namespace

1 介绍

在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上进行划分。HBase全局管理员可以创建、修改和回收namespace的授权。

namespace特性是对表资源进行隔离的一种技术,隔离技术决定了HBase能否实现资源统一化管理的关键,提高了整体的安全性。

## 2 命名空间namespace

HBase系统默认定义了两个缺省的namespace

hbase:系统内建表,包括namespace和meta表都在此

default:用户建表时未指定namespace的表都创建在此

-- 创建namespace
hbase>create_namespace 'nml_ljx'
-- 列出所有namespace
hbase>list_namespace
-- 查看namespace
hbase>describe_namespace 'nml_ljx'
-- 删除namespace
hbase>drop_namespace 'nml_ljx'
-- 在namespace下创建表
hbase>create 'nml_ljx:testtable', 'cf1'
-- 查看namespace下的表
hbase>list_namespace_tables 'nml_ljx'

3 授权

  • Create权限的namespace Admin可以对表创建和删除、生成和恢复快照
  • Admin权限的namespace Admin可以对表splits或major compactions
-- 当前用户:hbase
hbase>namespace_create 'hbase_ns'
-- 授权用户apple对hbase_ns写权限
hbase>grant 'apple', 'W', '@hbase_ns'
-- 回收用户apple对hbase_ns所有权限
hbase>revoke 'apple', '@hbase_ns'-- 当前用户:apple
hbase>create 'hbase_ns.table1', 'cfamily1'
hbase>create 'hbase_ns.table2', 'cfamily1'-- 用户apple创建了两张表table1和table2,对两张表有'RWXCA'权限
-- 若用户lemon也需获得hbase_ns下的权限,hbase管理员操作如下
-- 当前用户:hbase
hbase>grant 'lemon', 'W', '@hbase_ns'-- 此时lemon可以在hbase_ns下创建表,但无法读、修改、删除hbase_ns下已存在的表
-- 当前用户:lemon
hbase>scan 'hbase_ns:table1'
-- AccessDeniedException 报错无权限-- hbase管理员进行如下授权操作,lemon则可访问已经存在的表
-- 当前用户:hbase
hbase>grant 'alice', 'RW', 'hbase_ns.table1'
hbase>grant 'alice', 'RW', 'hbase_ns.table2'

配置hbase-site.xml启用授权机制,配置完成后需要重启HBase集群

<property><name>hbase.security.authorization</name><value>true</value>
</property>
<property><name>hbase.coprocessor.master.classes</name><value>org.apache.hadoop.hbase.security.access.AccessController</value>
</property>
<property><name>hbase.coprocessor.region.classes</name><value>org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.AccessController</value>
</property>

这篇关于hbase 简介、HBASE重要概念、表Table、命名空间、Row Key,区域Region、列族、hbase shell命令行方式操作,命名空间操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918270

相关文章

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen