#数据分析 #数据库 #快速 #数据 #内部 # #locustdb

nightly locustdb-derive

locustdb crate内部使用的过程宏

3个不稳定版本

0.2.1 2024年5月5日
0.2.0 2024年3月31日
0.1.0 2018年12月31日

#15 in #快速


locustdb 中使用

Apache-2.0

37KB
715

LocustDB

Build Status Crates.io Gitter

一个旨在在通用硬件上设定查询性能和存储效率新标准的实验性分析数据库。请参阅 如何在单台台式机上每秒分析数十亿条记录如何从单个磁盘每秒读取数亿条记录 以了解当前功能概述。

使用方法

下载最新的二进制发布版本 locustdb-0.1.0-alpha-x64-linux.0-alpha,它可以在大多数x64 Linux系统上通过命令行运行,包括Windows Subsystem for Linux。例如,要加载此存储库中的文件 test_data/nyc-taxi.csv.gz 并启动repl运行

./locustdb --load test_data/nyc-taxi.csv.gz --trips

当使用 --load 加载 .csv.csv.gz 文件时,假设每个文件的第一个行是包含所有列名的标题行。每列的类型将被自动推导,但对于包含数字/字符串/空条目的混合列,这可能会失败。

要将数据持久化到LocustDB的内部存储格式(允许在初始加载后从磁盘快速查询)中,请使用 --db-path 指定存储位置。在创建/打开持久数据库时,LocustDB会打开很多文件,如果打开文件的数量限制太低,可能会崩溃。在Linux上,您可以使用 ulimit -n 检查当前限制,并使用例如 ulimit -n 4096 设置新限制。

--trips 标志将配置用于加载14.6亿条出租车行程数据集的摄取模式,数据集可以在此处下载:下载链接

对于更多信息,使用 --help 命令。

$ ./locustdb --help
LocustDB 0.2.1
Clemens Winter <[email protected]>
Massively parallel, high performance analytics database that will rapidly devour all of your data.

USAGE:
    locustdb [FLAGS] [OPTIONS]

FLAGS:
    -h, --help             Prints help information
        --mem-lz4          Keep data cached in memory lz4 encoded. Decreases memory usage and query speeds.
        --reduced-trips    Set ingestion schema for select set of columns from nyc taxi ride dataset
        --seq-disk-read    Improves performance on HDD, can hurt performance on SSD.
        --trips            Set ingestion schema for nyc taxi ride dataset
    -V, --version          Prints version information

OPTIONS:
        --db-path <PATH>           Path to data directory
        --load <FILES>             Load .csv or .csv.gz files into the database
        --mem-limit-tables <GB>    Limit for in-memory size of tables in GiB [default: 8]
        --partition-size <ROWS>    Number of rows per partition when loading new data [default: 65536]
        --readahead <MB>           How much data to load at a time when reading from disk during queries in MiB
                                   [default: 256]
        --schema <SCHEMA>          Comma separated list specifying the types and (optionally) names of all columns in
                                   files specified by `--load` option.
                                   Valid types: `s`, `string`, `i`, `integer`, `ns` (nullable string), `ni` (nullable
                                   integer)
                                   Example schema without column names: `int,string,string,string,int`
                                   Example schema with column names: `name:s,age:i,country:s`
        --table <NAME>             Name for the table populated with --load [default: default]
        --threads <INTEGER>        Number of worker threads. [default: number of cores (12)]

目标

LocustDB的愿景。

快速

在通用硬件上,LocustDB在查询性能方面处于领先地位,无论是缓存内存中的数据还是从磁盘读取的数据。

成本低效

LocustDB自动实现惊人的压缩比率,具有最小的索引开销,并且存储相同数量的数据比任何其他系统都需要更少的机器。性能与存储效率之间的权衡是可配置的。

低延迟

新数据在几秒内即可供查询使用。

可扩展

LocustDB可以从单机无缝扩展到大型集群。

灵活易用

LocustDB应该可以最小化配置或模式设置即可使用,作为

  • 一个高度可用的分布式分析系统,持续摄取数据并执行查询
  • 一个用于从CSV文件加载数据和分析数据的命令行工具/REPL
  • 一个嵌入式数据库/查询引擎,通过cargo包含在其他Rust程序中

非目标

在LocustDB准备好投入生产之前,这些都是次要的,甚至可能与主要目标完全不一致。

强一致性保证和持久性保证

  • 在摄取过程中可能会丢失少量数据
  • 当节点不可用时,查询可能会返回不完整的结果
  • 查询返回的结果可能不代表一致的快照

高QPS

LocustDB在处理少量数据插入或操作时执行查询的效率不高。

完整SQL支持

  • 所有数据都是追加的,并且只能以批量方式删除/过期。
  • LocustDB不支持每个节点无法独立评估的查询(大型连接,复杂子查询,精确的集合大小,精确的前N个)。

支持成本效率低或专用硬件

LocustDB无法在GPU上运行。

从源码编译

  1. 安装Rust: rustup.rs
  2. 克隆仓库
git clone https://github.com/cswinter/LocustDB.git
cd LocustDB
  1. 使用 --release 进行编译以获得最佳性能
cargo run --release --bin repl -- --load test_data/nyc-taxi.csv.gz --reduced-trips

运行测试或基准测试

cargotest

cargobench

依赖关系

~3.5–4.5MB
~90K SLoC