Aerospike使用介绍

Aerospike简介

  • Aerospike是什么?
    Aerospike(以下简称AS)是一个以分布式为核心基础,可基于行随机存取内存中索引、数据或SSD存储中数据的数据库。它主要用于百G、数T等大数据量并且在数万以上高并发情况下,对性能也有ms读取插入要求的场景。目前主要集中于互联网广告行业,如eXelate、BlueKai、MediaV、 InMobi、 applovin等。
  • 特性

    • 可预见的高性能

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

    • 混合架构

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

    • 群集感知客户端软件

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

    • 无热点

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

    • 数据完整性

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

    • 线性扩展

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

    • 跨数据中心支持

      不同数据中心内的群集能够自动协调,从而实现绝对的可靠性

    • 提供API的语言

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

基本概念

  • namespace

    策略容器,类似RDBMS中的schema,可以设置副本数、内存大小、有效时长、存储引擎、文件存储位置

  • Sets

    类似RDBMS中的表

  • Records

    类似RDBMS中的行,行级的失效时间(TTL)

  • Bin

    类似RDBMS中的列,一行可以有多个bins

KEY操作命令

这里写图片描述

AS 数据类型

  • 基础类型

    • Integer

      • 64位有符号整型,[ −(2^63) to 2^63 − 1 ]

      • 每个整型占用8字节存储

    • String

      • String是以NULL-结尾的byte数组,可以达到128KB
    • Bytes

      • Byte数组,可以存储任何二进制数据
  • 复合类型

    • List
      • 排序的数据集合
    • Map
      • key-value对集合
    • List和Map都支持类型嵌套
  • 大数据类型
    • 说明
      • 超过普通bin大小1M的限制
      • 大数据类型允许在一个record bin中有一个非常大并且可以在AS中高效存储和访问的元素集合
      • 存储的元素可以是Integer/String/Map/List
    • Large Ordered List
      • 按key排序的集合
      • 提供的操作有
        • add()/add_all()/update()/update_all()
        • find()/exists()
        • scan()/filter() (with and without filter)
        • range() (with and without filter)
        • remove()/remove_all()/remove_range()
        • size()

函数

  • 仅支持用LUA写,在server端执行
  • Record UDF
    • 单记录操作
  • Stream UDF
    • 对分布于集群上的数据集进行过滤、转换、汇总

Secondary Index和汇总

  • Secondary index
    • 支持integer\string类型
    • 支持等于和范围过滤
    • 每个namespace支持256个secondary indexes
  • 汇总
    • 通过lua的类mapReduce实现

AS简单测试

对AS进行了grpc封装,下面的测试结果是只选了其中的一种查询进行测试。测试的查询相当于数据库里的查询:select t.cnname,t.code_id from data_type t where t.group_name=’EVENT’ and t.enname=’connect_success’;

测试环境:
116做RPC服务器,118做AS server、RPC客户端
116 CPU 24核, 118 CPU 32核
都是万兆网

  • as with grpc

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

  • as with thrift

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

这里写图片描述

  • As VS redis with thrift性能测试

    • AS
      次数=1000000 并发=300 tps=57793 #瓶颈在server的CPU, 使用率710%
      次数=1000000 并发=500 tps=58036
    • Redis

      次数=100000 并发=300 tps=28413
      次数=100000 并发=500 tps=30370 #瓶颈在redis CPU

AS vs Redis

  • AS优势

    • 数据可存储于内存、SSD

    • 同步复制,无需手工配置,可做机架感知、跨数据中心复制,不会丢失数据

    • 机群自动扩展,自动平衡数据

    • 客户端感知集群,app不需要知道集群节点

    • 二级索引、汇总

    • 概念、处理方式与RDBMS接近

  • Redis优势

    • 多种数据结构

    • 完善的文档,广泛的使用

    • 丰富的客户端

    • 结构简单

PS:
1、在做as\redis性能测试时,在并发量不大时redis性能只到as的一半,而且并发量一大redis就经常出错,故没有两者的性能测试对比
2、as对结构的支持不好,一个稍复杂的功能在redis很简单就能实现的,在AS上就得写好多,而且有并发冲突的风险,除非稍复杂的都用LUA脚本写成函数

参考资料
Redis官网 http://redis.io/
Redis命令参考 http://redis.readthedocs.org/en/latest/index.html
AS官网 http://www.aerospike.com/
AS官网文档 http://www.aerospike.com/docs/

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Aerospike和ClickHouse都是键值对内存数据库,但是它们的使用场景和特点有所不同。 Aerospike是一种高性能、可扩展的键值对内存数据库,适用于需要快速读写大量数据的场景,例如广告技术、实时分析和个性化推荐等。Aerospike支持多种数据类型,包括字符串、整数、浮点数、列表、映射和二进制数据等。Aerospike支持多种读写操作,例如单个键值对读写、批量读写、范围查询和二次索引查询等。Aerospike的优点是高性能、可扩展、易于使用和部署,缺点是不支持复杂查询和事务。 ClickHouse是一种高性能、可扩展的列式存储数据库,适用于需要快速查询大量数据的场景,例如日志分析、数据仓库和实时报表等。ClickHouse的特点是支持高并发、高吞吐量的查询,支持复杂的SQL查询和聚合操作,支持多种数据格式和压缩算法,支持分布式部署和数据复制。ClickHouse的优点是高性能、可扩展、支持复杂查询和事务,缺点是不支持实时更新和删除操作。 以下是两个例子: 1.使用Aerospike存储和读取数据 ```python import aerospike # 连接Aerospike数据库 config = { 'hosts': [ ('127.0.0.1', 3000) ] } client = aerospike.client(config).connect() # 写入数据 key = ('test', 'demo', 'key1') bins = { 'name': 'Alice', 'age': 25, 'gender': 'female' } client.put(key, bins) # 读取数据 (key, metadata, record) = client.get(key) print(record) # 关闭连接 client.close() ``` 2.使用ClickHouse查询数据 ```sql -- 创建表 CREATE TABLE test ( id UInt32, name String, age UInt8, gender String ) ENGINE = MergeTree() ORDER BY id; -- 插入数据 INSERT INTO test VALUES (1, 'Alice', 25, 'female'), (2, 'Bob', 30, 'male'); -- 查询数据 SELECT * FROM test WHERE age > 25; ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值