@ cloudbitmaps/ 摇摆
大型整数ID,存储在您自己的对象存储中,从任何地方读取. 装入一组不可改变
文档,然后询问 has, (中文(简体) ), count, (中文(简体) ), iterate, (中文(简体) ), intersect, (中文(简体) ), union 财务报告和审定财务报表 andNot,没有服务器或缓存可运行。 部分
云位图;这是您导入的软件包.
仅限无害环境管理,节点22.12. 使用
import; 用于require()时标和类型脚本,参见 常见的JS、快取和类型脚本。 。 。 .
前1.0:API和上盘格式仍然可以更改. 在npm上,这些文件与它们所运送的版本相符;在GitHub上,它们描述
main,更改日志则说每个版本都改变了什么.
安装
pnpm add @cloudbitmaps/roaring # the store, with in-memory and local-disk backends
pnpm add @cloudbitmaps/s3 # the storage you have: or @cloudbitmaps/gcs, or @cloudbitmaps/azure-blob
pnpm add @cloudbitmaps/tools # optional: price a store, offline
安装每张的同版本 @cloudbitmaps/* 软件包:它们一起发行,每个包都标出准确的版本 core 它是与建造的.
该店的"咆哮"用TypeScript来写出,没有本土代码: 这是什么意思。 。 。 .
使用
不需要设置 : MemoryStorage 将一切保存在过程中, 这是正确的第一眼和测试.
另存为 first-run.mjs 并运行它与 node数字 :
import { CloudRoaring, MemoryStorage } from '@cloudbitmaps/roaring';
const store = new CloudRoaring({ storage: new MemoryStorage() });
await store.load({ segment: 'shoppers' }, [5, 99_999, 1_234_567_890]); // a load replaces the segment
await store.load({ segment: 'active' }, [5, 7, 1_234_567_890]);
const shoppers = store.segment('shoppers');
console.log(await shoppers.has(99_999)); // true
console.log(await shoppers.count()); // 3
for await (const id of shoppers.intersect([store.segment('active')])) console.log(id); // 5, then 1234567890
坚持下去,通过一个不同的 后端 作为 storage。没有其他变化 :
| 后端 | 从 | 用它来 |
|---|---|---|
MemoryStorage | @cloudbitmaps/roaring | 测试和第一眼 |
LocalFsStorage('./.cloudbitmaps') | @cloudbitmaps/roaring | 一个文件夹上的进程: 笔记本电脑或 CI 任务 |
S3Storage({ bucket, prefix }) | @cloudbitmaps/s3 | 生产:经审定的 |
GcsStorage({ bucket, prefix }) | @cloudbitmaps/gcs | 谷歌云存储; 外部 已验证信封 |
AzureBlobStorage({ connectionString, container }) | @cloudbitmaps/azure-blob | Azure Blob 存储器; 外部 已验证信封 |
RoaringBitmap 是解码器的位图作为公用类: 一组可变的无符号的32位代号, 带有可移植的咆哮
字节,在TypeScript中没有本地代码. 从这里导入 @cloudbitmaps/roaring,与商店的同一行:
import { CloudRoaring, MemoryStorage, RoaringBitmap } from '@cloudbitmaps/roaring'一个商店装满一个,而且
RoaringBitmap.deserialize(bytes) 是你没有写的字节的唯一门.
两个电话比本地人慢 roaring 包件在长椅上的比例为10以上,以及载有数字的船舶。 第一个 deserialize 在新工艺中,测量出的比例约为14.6(中位数2.20 ms相对于0.151 ms);这是第一次呼叫的一次性成本(预期原因是代码尚未优化并加上编译时间),后来的解码在五个数据集中测出的比例为2.2比5.9. 64个密集位图与 orMany 测量比率约为11。 每个数字都在 表单。 。 。 .
import { CloudRoaring, MemoryStorage, RoaringBitmap } from '@cloudbitmaps/roaring';
const store = new CloudRoaring({ storage: new MemoryStorage() });
const vip = new RoaringBitmap([5, 99_999, 1_234_567_890]); // any iterable of ids
vip.add(7);
vip.removeMany([99_999]);
vip.addMany(new RoaringBitmap([8, 9])); // another bitmap, or a Uint32Array, works too
await store.load({ segment: 'vip' }, vip); // read, never changed or kept
// Bytes from another process go through the one safe door: capped, checked, one whole bitmap.
const received = RoaringBitmap.deserialize(vip.serialize());
console.log(received.size, received.minimum(), received.maximum()); // 5 5 1234567890
API 参考文献
拥有所有的方法 以及它与 roaring 软件包.
存储的部分没有 add 或者说 remove (单位:千美元)RoaringBitmap does, for a bitmap in memory):只有装入新一代的片段才会改变. 负载是批量工作 不是
请求处理器. store.exists(ref) 说明是否装入了一段 。 负载需要识别码, 或是您已经位图
持有 : store.load(ref, bitmap) (单位:千美元) RoaringBitmap (或 a 个) RoaringBitmap32),或 { serialized } 手提式咆哮字节,选中
在任何事物被写入和装入没有每作一作的作品之前, 进入一代, 持有块块, 块块的id将写( 它的脚带有自己的写作身份) .
要写很多结果 在同一存储的操作, store.materializeMany 读取每首歌一整批
and 编号 : or 编号 : andNot 产出而不是每产出一次 *Into 调用, 以及您已在内存流中保存的一组
供养. 一次考试产生的许多产出
二者相盖.
选项
new CloudRoaring({ storage, ...options })。仅限 storage 需要时间。 商店不取的密钥被拒绝
名称.
| 选项 | 它所持有的 |
|---|---|
storage (必须) | a 后端(见上文) |
cache | maxChunks, (中文(简体) ), ttlMs (缓存块的可选年龄限制;省略了块,直到被拆迁为止), genTtlMs (读者如何很快看到新的负载,默认2000ms), readerMax, (中文(简体) ), readerMaxBytes |
encryption | { keystore, required }: 以自己的密钥加密片段 |
retry | 调制读取的重试,或 false 关闭它 |
metrics | 参数沉入;默认关闭 |
budget | { maxRequests } 或者说 false: 逐名请求上限 |
seams | { clock, rng, entropy }: 确定性,用于测试和可重放的工作; 每代书写身份的来源是最后一个 |
付出的代价
凉了 intersect 在两个50万分之一的片段中 分享了他们的1,999个块中的100个块 使6个在中位数上得到107.87毫秒, 每笔2.40美元
百万个 按列表价格计算:在S3区域内计量,运行时间为2026-10-30,其客户拥有128个套接字. 在散开的布局上,它读取更多
字节比它需要的,跨区域可以花费比它所保存的请求还要多. 一个部分的第一个单段 store.load() 已制作
2个PUT+3 得到, 每百万美元11.20美元 按默认价格计算,指针包括: 请求在S3区域内,在同一跑道上进行计量. 一个稳定的单段 store.load() 时间 keep: 12 删除代号成本 每百万美元12.00美元,对于 2 PUT + 5 GET 和一个免费删除,在 S3 区域内测量的请求,在同一运行中。 凉了 count() 是一个
指针读取:它读取了没有有效载荷和物体.
交易是明确的。 缺少缓存的会员资格检查 相对于对象存储, 成本范围是一定的,
其中,进程内存储会花费读取的内存。 如果你需要次毫秒的答案 在一个工作集,适合
绑定缓存,使用Redis. 基准
给出方法 和数字不能确定的。 从大小到价格 seg.stat() 报告,使用
@cloudbitmaps/tools (单位:千美元)成本指南) (中文(简体) ).
生产前
- 运行
await store.preflight()第一次载货之前 它读登记册、写作、试图再写、读取、列出和 删除一个探测对象并检查后端的生命周期规则,以及答案{ ok, checks }; 见store.preflight()。 。 。 . 它不检查s3:AbortMultipartUpload,登记簿的If-Match,或删除后读取,除其他外: 完整列表。 。 。 . - 授予库问题权限并添加一个生命周期规则来中止不完整上传. S3和GCS系统
后端为
checkLifecycle()阅读桶的规则 并说是删除还是存档什么商店 保留; Azure Blob 的答案unchecked并说如何用手检查;MemoryStorage财务报告和审定财务报表LocalFsStorage没有 规则和答案ok。 。 。 . - 使用一个尊重有条件写作并具有强烈一致性的桶(读取或写作后的列表)
删除它)
@aws-sdk/client-s33.700.0 或以后通过自己的S3客户端. 飞行前报告第二个成功(即3.640.0或以上的SDK如何显示)和读取或列出 而不是从3.641.0到3.699.0If-None-Match但会下降If-Match: SDK地板留你检查. - 在您的存储客户端上设定请求超时 。 自己读取重试,每个后端都可以计时(
readTimeoutMs); 瞬间失败的写作由您重新运行. - 用数据备份注册簿, 如果您加密的话, 键盘也会备份 。 如果你丢了钥匙 数据就不见了.
- 排好你的载荷,和
retireExpired如果你使用保留。 运行载入请求路径 .
这个 生产清单 覆盖每个项目.
来自Redis位图?
GETBIT 实值 has, (中文(简体) ), BITCOUNT 实值 count,以及 BITOP AND 编号 : OR 编号 : DIFF 为: intersect 编号 : union 编号 : andNot,与
intersectInto, (中文(简体) ), unionInto 财务报告和审定财务报表 andNotInto 以新一代方式公布结果 materializeMany 出版
许多这样的结果 一次通过. EXPIRE 变成
setRetention 加一个 retireExpired 扫描你的时间表,每段,从来没有每个id. SETBIT 没有等效的 :
没有每个字。 将设定建立为上游并加载, 并且一次不循环一个 ID 。 删除一个 ID
到处都是 eraseSubject重写遵守,而不是热路动词。 这不是一个临时替代,和
不结转的是书写模型和生字节: exportSegments 写可移植的咆哮和ndjson,而不是雷迪斯的布局. 全面测绘
说还有什么不同.
文档
贷项
咆哮比特玛克格式及其算法是丹尼尔·莱米尔和同僚的作品. 见
(原始内容存档于2018-03-26). rawingbitmap.org 编辑 咆哮格式规格, (中文(简体) ),
定义可移植字节 .crbm 对象持有。 商店的编码器执行这种格式和那些
typeScript 中的算法 (它是如何被控制在克罗林; 骑行,通过 roaring 具有拘束力,是其测试的参照物。 文件:
- S. Chambi, D. Lemire, O. Kaser, R. Godin,"用Roaring bitmaps更好的位图性能","R, 软件: 经历 46(5), 2016 (英语). arXiv:1402.6407 (中文(简体) )
- D.Lemire,G.Ssi-Yan-Kai,O.Kaser,"与Roaring一致的更快和更小的压缩位图","持续", 软件: 实践和经验 46 (11), 2016 (英语). arXiv:1603.06549 (英语)
- D.Lemire,O.Kaser,N.Kurz,L.Deri,C.O'Hara,F.Saint-Jacques,G.Ssi-Yan-Kai,"Roaring Bitmaps:执行" “优化软件库”, 软件:实践和经验 48(4), 2018 (英语). arXiv:1709.07821 (中文(简体) )
许可证
阿帕奇 - 2.0