Aerospike

基本介绍

Aerospike(以下简称AS)是一个以分布式为核心基础,可基于行随机存取内存中索引、数据或SSD存储中数据的数据库。它主要用于百G、数T等大数据量并且在数万以上高并发情况下,对性能也有毫秒级读取插入要求的场景。

特性

  • 可预见的高性能

99% 的响应可在 1 毫秒内实现,99.9% 的响应可在 5 毫秒内实现。

  • 混合架构

索引存储在RAM 中,而数据存储在闪存/固态硬盘 (SSD) 上。

  • 群集感知客户端软件

客户端知晓数据的存放位置,因此通常能够通过一次单跳检索到数据。

  • 无热点

使用复杂的哈希函数来确保数据均等地分布到所有可用节点,从而将需求平均分布到各资源上。

  • 数据完整性

保持了高度的一致性,或者允许对跨越多个群集和数据中心的一致性进行调节。

  • 线性扩展

能够根据需要安装到多个数据中心内分组为多个群集的多个节点上。添加节点,无需分片,无需人工干预。

  • 提供API的语言

AS支持多种语言,诸如C/C++、 Java、 C#、 Python、 PHP、 Go、 Node.js、 Ruby、 Erlang、 libevent2 (C)、 Perl等等。

AS的一些基本概念

AS中的一些基本概念,主要有:namespace、sets、record、bin(对标关系型数据库:数据库、表、行、列)

  • 命名空间-Namespaces对标mysql中的数据库.一个namespace包含记录(records)、索引(indexes)、策略(policies)。其中策略决定namespace的行为,包括数据存储位置在内存还是SSD、一条记录存储的副本个数、过期时间(TTL)。其中与redis不同的点:redis针对key设置的TTL,AS可以在库层级进行全局设置,并且支持对于已存在的数据进行TTL的设置。
  • 集合-Set对标mysql中的表。集合set存储于命名空间,是一个逻辑分区,set的存储策略继承自namespace,也可以为set设置单独的存储策略。
  • Records对标mysql中行。包括key、Bins(value)、Metadata(元数据)。key全局唯一,作为K-V数据库一般都是通过key去进行查询,Bins相当于列,存储具体的数据。元数据存储一些基本信息,比如TTL。
  • Keykey,摘要。为所有操作定位记录,key主要用于应用程序访问,摘要用于数据库内部查找记录。
  • Metadata每一天记录都包含以下几条元数据1.generation(代):表示记录被修改的次数。2.time-to-live(TTL):AS会自动根据记录的TTL使其过期。3.last-update-time(LUT):上次更新时间,这是一个数据库内部的元数据,不会返回给客户端。
  • Bins在一条记录里,数据被存储在一个或多个bins里,bins由名称和值组成。bins不需要指定数据类型,数据类型有bins中的值决定。

系统架构

Aerospike是一个分布式,可扩展的数据库。该体系结构具有三个主要目标:

  • 为应用程序创建一个灵活的可扩展平台。
  • 提供传统数据库期望的鲁棒性和可靠性(如ACID)。
  • 以最少的人工参与提供运营效率。

Aerospike体系结构包括三层:

  • 客户端层:此群集感知层包括开源客户端库,这些库实现了Aerospike API,跟踪节点并知道数据在群集中的位置。
  • 集群和数据分发层:该层管理集群通信,并自动执行故障转移,复制,跨数据中心同步以及智能重新平衡和数据迁移。
  • 数据存储层:该层可靠地将数据存储在DRAM和Flash中,以便快速检索。

AS库操作登录

AS库操作的登录:

1、登录AS库节点所在的服务器

2、直接在服务器中输入:aql,然后进入到AS数据库,进行数据库操作,与mysql类似。

select * from 命名空间(数据库名称).TML_REAL_TIME_USER_INFO(表名称)

比如:select * from database.TML_REAL_TIME_USER_INFO

AS库操作常用命令

远程连接:aql -p 3000 -h xx.xxx.xx.xx

显示所有命名空间:show namespaces

显示所有字段(相当于mysql table中的column):show bins

显示所有集合(相当于mysql中的show tables):show sets

显示查询信息:select * from bar.messagecache where PK=xx

查看AS库是否正常:systemctl status aerospike

  • 1.增加(插入一条数据)增加一条数据就新增了一个表。前提:testMemory为命名空间(类似于mysql中的数据库名称),demo为as中的set(类似于mysql中的表),类似于mysql中的database.table(对应的数据库.对应的数据表)insert into testMemory.demo(PK,pass,name) values('key1',123,'abc')PK-持索引查询,PK即键名,比如PK='UID'select * from testMemory.demo where PK='key1'
  • 2.删除delete from testMemory.demo where PK='key1'
  • 3.修改修改即覆盖更新
  • 4.查询查询该命名空间下的所有的sets,testMemory为命名空间select * from testMemory (查库,mysql不支持)select * from testMemory.demo(查表,mysql查对应数据库下的表)
  • 5.创建索引前提:没有建立索引时是不能根据bin查询的。create index idx_demo_name on testMemory.demo(name) stringselect * from testMemory.demo where name='abc'
  • 6.查看AS库,可以执行命令查看对应的字段,在查询对应的内容set output rawselect * from database.TML_REALTIME
posted @ 2024-04-23 11:44  躺平小伙  阅读(38)  评论(0编辑  收藏  举报