Docker安装AerospikeAerospike镜像下载,安装指定版本(4.0.0.5)docker pull aerospike:4.0.0.5
C:\Users\guoyu.huang>docker pull aerospike:4.0.0.54.0.0.5: Pulling from library/aerospike297061f60c36: Pull completee9ccef17b516: Pull completedbc33716854d: Pull complete8fe36b178d25: Pull complete686596545a94: Pull complete0ac40e4f5c7d: Pull completeb122ee426bc3: Pull complete195ffbe32fa7: Pull completeDigest: sha256:89081138baba9715c35280007365dffbd13e0f066cb9e78843a21d041af70f10Status: Downloaded newer image for aerospike:4.0.0.5docker.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.571546c8f04ef8dcbc550fdd7c0442a55a1f4344da323638d72a71e6a4006cd2512Aerospike基础知识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 bashroot@71546c8f04ef:/# cd usr/binroot@71546c8f04ef:/usr/bin# aqlSeed: localhost:cluster_a:3000Config File: /etc/aerospike/astools.conf /root/.aerospike/astools.conf2019-09-27 02:29:45 WARN Failed to connect to seed localhost 3000. AEROSPIKE_ERR_CONNECTION Socket connect failed: [::1]:3000Aerospike Query ClientVersion 3.15.3.2C Client Version 4.3.5Copyright 2012-2017 Aerospike. All rights reserved.aql>
namespace增加namespaceAerospike无法通过指令来添加,需要修改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会比较麻烦一点,参考文章后一段。
查询所有namespaceaql> show namespaces+------------+| namespaces |+------------+| "hgy" |+------------+[127.0.0.1:3000] 1 row in set (0.002 secs)
OK
set DDL CREATE INDEX ON [.] () NUMERIC|STRING|GEO2DSPHERE CREATE LIST/MAPKEYS/MAPVALUES INDEX ON [.] () NUMERIC|STRING|GEO2DSPHERE DROP 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
asinfoasinfo -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.confe8a3e1fc5fb62097cd647e6e02b616abc64f8bcd55fcb3c706cd8b9d8164cf4512这时候启动肯定是失败的,因为找不到/hgy/aerospike.conf这个文件,这时候可以通过文件复制的办法,把自定义的aerospike.conf复制到容器中
C:\Users\guoyu.huang>docker cp d:/aerospike.conf e8a3:/hgy1重新启动,并查看日志
C:\Users\guoyu.huang>docker start e8a3e8a3
C:\Users\guoyu.huang>docker logs --since 30m e8a3link eth0 state uplink eth0 state up in 0Sep 27 2019 08:17:10 GMT: FAILED ASSERTION (config): (cfg.c:2020) couldn't open configuration file /hgy/aerospike.conf: No such file or directorySep 27 2019 08:17:10 GMT: WARNING (as): (signal.c:153) SIGINT received, shutting downSep 27 2019 08:17:10 GMT: WARNING (as): (signal.c:156) startup was not complete, exiting immediatelylink eth0 state uplink eth0 state up in 0Sep 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