#数据分析 #高性能 #性能 #数据集 #低延迟 #查询

nightly bin+lib locustdb

嵌入式高性能分析数据库

21 个版本

0.5.5 2024年6月8日
0.5.3 2024年5月14日
0.4.2 2024年3月31日
0.3.4 2020年7月4日
0.2.1 2019年2月17日

#155数据库接口

每月 48 次下载

自定义许可证

2.5MB
36K SLoC

LocustDB

Build Status Crates.io Gitter

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

使用方法

下载最新的二进制发行版,它可以在大多数 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 应该可以以最小的配置或模式设置即可使用,作为

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

非目标

在 LocustDB 准备好投入生产之前,这些目标最多只是分心,如果不是与主要目标完全不相符的话。

强一致性保证和持久性

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

高 QPS

LocustDB 不会高效地执行插入或操作少量数据的查询。

完全支持 SQL

  • 所有数据都是追加的,只能批量删除/过期。
  • LocustDB 不支持每个节点无法独立评估的查询(大型连接,复杂子查询,精确集合大小,精确 top 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

依赖关系

~84MB
~1.5M SLoC