首页 > 解决方案 > Node - 在内存之外存储数组的最快方法

问题描述

问题:我有一个应用程序处理大量数组,特别是大约 20k 个单独的数组,每个数组长度为 1000 个项目(整数,如果重要的话)。我最近远离对象以减少我正在序列化(并最终解析)的原始数据量,并切换到数组以使其更易于处理和序列化,但现在我不确定如何存储数据。

问题:如果我正在寻找将任何随机数组加载回内存(并随后卸载它们)的最快方法,我是否应该以数据库以外的其他格式存储这些数组(CSV、文件、json ..) ,我应该将每个数组放在一个只有两列的表中,一列用于增量 id,另一列用于数组的值(一些可变长度的整数),还是某种允许/鼓励本机数组的数据库?

我的想法:我最初打算将每个数组存储在一个包含两列的表中,如上所述,但这让我相信我会遇到两个问题:1)我无法“保存”每个数组,而它是在内存中存储到数据库中,而无需以任何方式对其进行格式化(即,我想要类似于“插入 table1 array1”的功能)。2)我希望能够在一行中读取整个数组,只需选择没有任何格式的表格(即“select table1”=> [x,y,z ..])。虽然我知道 MariaDB 和其他 SQL 数据库具有 useArray 功能,但我不相信它们会按照我希望的方式工作。

目标:我需要一些方法在我的应用程序内存之外存储一个数组,可以非常快速且理想地异步调用和读取。在理想情况下,如果我使用对象而不是数组,我希望速度与 SQL DB 或 Redis 存储相当。

我考虑过带有某些库的 CSV 文件或带有 FS 的其他文件格式,但是这些速度与数据库相比如何?我的直觉告诉我,与它们相比,它们可能太慢了,甚至无法考虑。

谢谢!

编辑:为了澄清,我最初在标题中使用了“最简单”。简单性在这里并不太重要,我能够保存数组并将其从内存中删除并随后将其加载回内存的速度是。

编辑2:我只是随机想,因为如果我要将它序列化为字符串,我将在内存中序列化这些数据,是否更容易以某种方式存储字符串然后读取每个字符串并将其拆分为。分裂?

标签: mysqlnode.jsarraysdatabasefile

解决方案


推荐阅读