npm 托管的循环/环形缓冲区库

问题描述 投票:0回答:2

NPM(Node.JS 包管理器)上是否有循环缓冲区/环形缓冲区的实现?我可以轻松地自己实现一个,但我希望有一个易于部署和维护的库。

我的用例是将时间序列存储在固定大小的内存数据库中,就像 RRDTool 一样,但是 RRDTool 及其在 Javascript 中的重新实现(我忘记了名字)都不适合。我需要存储大型 (50KB) JSON 对象。

javascript data-structures node.js npm
2个回答
1
投票

意识到这个问题是在大约 4 个月前被问到的,但我想我不妨分享一下。

不久前我自己出于另一个目的写了一个,今天把它扔到了 npm 上。它被命名为CBuffer。 README.md 文件包含有关如何使用它的博客文章的链接。只需通过

安装即可
npm install CBuffer

并通过以下方式在您的脚本中使用它:

var CBuffer = require( 'CBuffer' ).CBuffer;

我花了很多时间试图将 GC 降到最低,这是我能找到的最快的实现。


0
投票

该线程重点介绍了 JavaScript 中循环缓冲区的经典用例。如果您正在探索用于固定容量数据管理的现代高性能解决方案,您可能会发现 Buflux [https://github.com/faizanu94/buflux] 非常适合。它是一个轻量级、事件驱动的缓冲区库,专为 Node.js 和浏览器环境设计,并且包含对循环缓冲区行为的内置支持。

Bflux 支持多种溢出策略:

  • EVICT:自动删除最旧的项目以模拟循环缓冲区。
  • 拒绝:当缓冲区已满时,安全地阻止新添加。

以下是 Buflux 如何简化循环缓冲区管理的示例:

import { Buflux, OverflowMode } from 'buflux';

// Create a buffer with capacity 3 and eviction strategy
const buffer = new Buflux<number>({
  capacity: 3,
  overflow: OverflowMode.EVICT, // Automatically evicts the oldest item
});

buffer.enqueue(1); // [1]
buffer.enqueue(2); // [1, 2]
buffer.enqueue(3); // [1, 2, 3]
buffer.enqueue(4); // Evicts 1, buffer becomes [2, 3, 4]

console.log(buffer.toArray()); // Output: [2, 3, 4]
console.log(buffer.peek()); // Output: 2

Bflux 还发出入队、出队、溢出和拒绝等事件,因此您可以将其无缝集成到更大的系统中。

它非常适合任务队列、速率限制、缓存或任何需要高效数据处理的情况。

© www.soinside.com 2019 - 2024. All rights reserved.