Aerospike - 安装以及入门知识

2022-06-21 00:00:00 数据 数据库 操作 记录 策略

Docker安装Aerospike
Aerospike镜像下载,安装指定版本(4.0.0.5)
docker pull aerospike:4.0.0.5

C:\Users\guoyu.huang>docker pull aerospike:4.0.0.5
4.0.0.5: Pulling from library/aerospike
297061f60c36: Pull complete
e9ccef17b516: Pull complete
dbc33716854d: Pull complete
8fe36b178d25: Pull complete
686596545a94: Pull complete
0ac40e4f5c7d: Pull complete
b122ee426bc3: Pull complete
195ffbe32fa7: Pull complete
Digest: sha256:89081138baba9715c35280007365dffbd13e0f066cb9e78843a21d041af70f10
Status: Downloaded newer image for aerospike:4.0.0.5
docker.io/library/aerospike:4.0.0.5

容器创建
docker run -d --name aerospike4.0.0.5 -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike:4.0.0.5

C:\Users\guoyu.huang>docker run -d --name aerospike4.0.0.5 -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike:4.0.0.5
71546c8f04ef8dcbc550fdd7c0442a55a1f4344da323638d72a71e6a4006cd25
1
2
Aerospike基础知识
Aerospike官网介绍:https://www.aerospike.com/docs/guide/index.html

该模块内容大部分来自亦一亦二的博文:https://www.jianshu.com/p/8d843d7a6a27

简介
Aerospike是一个分布式,高可用的 K-V类型的Nosql数据库。提供类似传统数据库的ACID操作。

Atomicity原子性;Consistency一致性;Isolation隔离性;Durability耐久性

Aerospike和Redis的不同
redis数据完全存储在内存虽然保证了查询性能,但是成本太高。Aerospike大的卖点就是可以存储在SSD上,并且保证和redis相同的查询性能。Aerospike内部在访问SSD屏蔽了文件系统层级,直接访问地址,保证了数据的读取速度。Aerospike同时支持二级索引与聚合,支持简单的sql操作,相比于其他nosql数据库,有一定优势。

基本概念
Namespace (Tablespace or Database)
Aerospike数据存储的高层级,类比于传统的数据库的库层级,一个namespace包含记录(records),索引(indexes )及策略(policies)。

其中策略决定namespace的行为,包括:

数据的存储位置是内存还是SSD。
一条记录存储的副本个数。
过期时间(TTL)。
Set (Table)
存储于namespace,是一个逻辑分区,类比于传统数据库的表。

set的存储策略继承自namespace,也可以为set设置单独的存储策略。

Record (Row)
类比于传统数据库的行,包含key,Bins(value)和Metadata(元数据)。

key全局,作为K-V数据库一般也是通过key去查询。Bins相当于列,存储具体的数据。元数据存储一些基本信息,例如过期时间等。

Key And Digest
提到key,有一个和key伴生的概念是摘要(Digest),当key被存入数据库,key与set信息一起被哈希化成一个160位的摘要。数据库中,摘要为所有操作定位记录。

key主要用于应用程序访问,而摘要主要用于数据库内部查找记录.

Bin (Column)
在一条Record里,数据被存储在一个或多个bin中,bin由名称和值组成。bin不需要指定数据类型,数据类型有bin中的值决定。动态的数据类型提供了很好的灵活性。Aerospike中每条Record可以由完全不同的bin组成。Record无模式,你可以在Record的任何生命周期增加或删除bin。

在一个Namespace中bin的名称多包含32k,这是由内部字符串优化所致。(相比于HBase支持几百万列还是有一定差距,如果想直接将HBase表迁移到Aerospike可能需要重新设计存储结构)

Bin的数据类型有:Integer,String,BLOB,List,Map

Metadata
每一条Record包含以下几条Metadata:

generation(代):表示Record被修改的次数。该数字在程序读数据时返回,用来确认正在写入的数据从后一次读开始未被修改过。
time-to-live(TTL):Aerospike会自动根据记录的TTL使其过期。每次在对象上执行写操作TTL就会增加。3.10.1版本以上,可以通过设置策略,使更新记录时不刷新TTL。
last-update-time (LUT):上次更新时间,这是一个Namespace内部的metadata,不会返回给客户端。
基本操作
使用aql进行操作,因为我使用docker,所以需要先进入容器内部,指令如下:

C:\Users\guoyu.huang>docker exec -it 7154 bash
root@71546c8f04ef:/# cd usr/bin
root@71546c8f04ef:/usr/bin# aql
Seed: localhost:cluster_a:3000
Config File: /etc/aerospike/astools.conf /root/.aerospike/astools.conf
2019-09-27 02:29:45 WARN Failed to connect to seed localhost 3000. AEROSPIKE_ERR_CONNECTION Socket connect failed: [::1]:3000
Aerospike Query Client
Version 3.15.3.2
C Client Version 4.3.5
Copyright 2012-2017 Aerospike. All rights reserved.
aql>

namespace
增加namespace
Aerospike无法通过指令来添加,需要修改aerospike.conf文件。

# Aerospike database configuration file.

# This stanza must come first.
service {
.....
}

logging {
.....
}

network {
service {
......
}

heartbeat {
......
}

fabric {
......
}

info {
......
}
}

namespace hgy {
replication-factor 2
memory-size 128M
default-ttl 30d # 5 days, use 0 to never expire/evict.

storage-engine memory

# To use file storage backing, comment out the line above and use the
# following lines instead.

# storage-engine device {
# file /opt/aerospike/data/test.dat
# filesize 4G
# data-in-memory true # Store data in memory in addition to file.
# }
}

修改namesapce中的属性值,保存之后重启服务即可。

因为测试使用,所以直接使用内存,不使用磁盘持久化,如果是使用docker会比较麻烦一点,参考文章后一段。

查询所有namespace
aql> show namespaces
+------------+
| namespaces |
+------------+
| "hgy" |
+------------+
[127.0.0.1:3000] 1 row in set (0.002 secs)

OK

set
DDL
CREATE INDEX <index> ON <ns>[.<set>] (<bin>) NUMERIC|STRING|GEO2DSPHERE
CREATE LIST/MAPKEYS/MAPVALUES INDEX <index> ON <ns>[.<set>] (<bin>) NUMERIC|STRING|GEO2DSPHERE
DROP INDEX <ns>[.<set>] <index>
Examples:

CREATE INDEX idx_foo ON test.demo (foo) NUMERIC
DROP INDEX test.demo idx_foo

添加
Aerospike的“集合”类似于关系数据库中的表。大的区别之一是,使用Aerospike,您无需预定义架构。因此,在集合中插入记录时将动态隐式创建集合。

aql> show sets
[127.0.0.1:3000] 0 rows in set (0.001 secs)

OK

aql> insert into hgy.a(pk,a,b) values('1',1,2)
OK, 1 record affected.

aql> show sets
+------------------+-------+----------------+---------+-------------------+-----+-------------------+--------------+------------+
| disable-eviction | ns | set-enable-xdr | objects | stop-writes-count | set | memory_data_bytes | truncate_lut | tombstones |
+------------------+-------+----------------+---------+-------------------+-----+-------------------+--------------+------------+
| "false" | "hgy" | "use-default" | "1" | "0" | "a" | "26" | "0" | "0" |
+------------------+-------+----------------+---------+-------------------+-----+-------------------+--------------+------------+
[127.0.0.1:3000] 1 row in set (0.001 secs)

OK

删除
两种删除方式

truncate清空之后,重启,系统会删除
aql> truncate hgy.a;
OK

asinfo
asinfo -v "set-config:context=namespace;id=namespace_name;set=set_name;set-delete=true;"
1
疑难问题
Docker中指定配置文件
C:\Users\guoyu.huang>docker run -d -v /hgy --name aerospike4.0.0.5 -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike:4.0.0.5 asd --foreground --config-file /hgy/aerospike.conf
e8a3e1fc5fb62097cd647e6e02b616abc64f8bcd55fcb3c706cd8b9d8164cf45
1
2
这时候启动肯定是失败的,因为找不到/hgy/aerospike.conf这个文件,这时候可以通过文件复制的办法,把自定义的aerospike.conf复制到容器中

C:\Users\guoyu.huang>docker cp d:/aerospike.conf e8a3:/hgy
1
重新启动,并查看日志

C:\Users\guoyu.huang>docker start e8a3
e8a3

C:\Users\guoyu.huang>docker logs --since 30m e8a3
link eth0 state up
link eth0 state up in 0
Sep 27 2019 08:17:10 GMT: FAILED ASSERTION (config): (cfg.c:2020) couldn't open configuration file /hgy/aerospike.conf: No such file or directory
Sep 27 2019 08:17:10 GMT: WARNING (as): (signal.c:153) SIGINT received, shutting down
Sep 27 2019 08:17:10 GMT: WARNING (as): (signal.c:156) startup was not complete, exiting immediately
link eth0 state up
link eth0 state up in 0
Sep 27 2019 08:17:29 GMT: INFO (as): (as.c:319) <><><><><><><><><><> Aerospike Community Edition build 4.0.0.5 <><><><><><><><><><>
Sep 27 2019 08:17:29 GMT: INFO (config): (cfg.c:3621) # Aerospike database configuration file.
......

————————————————
版权声明:本文为CSDN博主「瑾析编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/XiaMen_BuYu/article/details/101604567

相关文章