当前位置: 首页 > 工具软件 > Aerospike > 使用案例 >

Aerospike - 安装以及入门知识

谷良弼
2023-12-01

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

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的行为,包括:

  1. 数据的存储位置是内存还是SSD。
  2. 一条记录存储的副本个数。
  3. 过期时间(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:

  1. generation(代):表示Record被修改的次数。该数字在程序读数据时返回,用来确认正在写入的数据从最后一次读开始未被修改过。
  2. time-to-live(TTL):Aerospike会自动根据记录的TTL使其过期。每次在对象上执行写操作TTL就会增加。3.10.1版本以上,可以通过设置策略,使更新记录时不刷新TTL。
  3. 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

删除

两种删除方式

  1. truncate清空之后,重启,系统会删除
aql> truncate hgy.a;
OK
  1. asinfo
asinfo -v "set-config:context=namespace;id=namespace_name;set=set_name;set-delete=true;"

疑难问题

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

这时候启动肯定是失败的,因为找不到/hgy/aerospike.conf这个文件,这时候可以通过文件复制的办法,把自定义的aerospike.conf复制到容器中

C:\Users\guoyu.huang>docker cp d:/aerospike.conf e8a3:/hgy

重新启动,并查看日志

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.
......

 类似资料: