【问题标题】:Performance: Object array vs database for 100s of records? [closed]性能:对象数组与数据库的 100 条记录? [关闭]
【发布时间】:2014-05-24 12:52:14
【问题描述】:

我在对象数组中有非敏感数据:

 data = [ { prop1: value, prop2: value}, ... ]

其中包含大约 200 个对象,并且可能会增长到数千个。读取远不止写入,我正在使用一些 Javascript 根据需要从数组中排序/提取。虽然我很乐意自动对数据进行排序和过滤,但即使对几千条记录使用数据库似乎也有点矫枉过正。

对象数组的大小会开始严重影响性能,什么时候数据库更有意义?

编辑:我的困境是,我能否安全地加载整个阵列客户端并让浏览器完成繁重的工作,从而省去为一组简单的数据和操作管理数据库的麻烦?

【问题讨论】:

  • 当您说“我的数组中只有几千个元素”时,您需要找到一种不同的数据存储方式。
  • @lonesomeday 我不一定同意。这个 Q 很可能是 OT 但考虑到它完全是主观的并且在很大程度上取决于数据及其使用情况。
  • 我同意乔的观点。数组适合多少项的具体细节取决于很多因素,例如:数据有多大,如果全部加载,您的带宽和目标系统能否蓬勃发展,您需要执行哪些类型的查询它,您将实际使用数据集中的多少项,需要什么类型的性能,您可以使用多少 RAM,等等……如果不完全了解所有这些方面,就无法回答这个问题。
  • 没有明确的答案。只需从数组开始,当你遇到问题时,采取相应的行动。
  • 澄清一下,因为这不是敏感数据,我想知道是否可以将数组转储到用户的客户端并让客户端逻辑执行任何操作而不是服务器。即,一个大阵列是否会对普通用户的系统造成负担?

标签: javascript arrays database node.js


【解决方案1】:

由于 32 位硬件系统的索引限制,数组的长度存在明显的物理限制(据我所知,JavaScript 规范目前不鼓励在处理数组时使用 64 位架构) .

根据this answer

最长的数组可能有 232 - 1 = 4,294,967,295 = 42.9 亿个元素

这显然是很多记录。

亟待解决的问题是:如果我使用大型阵列,它会影响用户吗?这显然取决于运行代码的硬件。如果你不能确定硬件(在为网络上的浏览器提供 JavaScript 时你不能确定),你应该假设该技术是最小的公分母(在贬义意义上,而不是数学意义上)。

这意味着研究您的人口统计数据、调查消费者统计数据、浏览器统计数据、对各种架构/设置进行测试,然后在全部完成后仍然担心这个问题......

或者。

使用能做好一件事和一件事的数据存储。

我认为,在内心深处,你知道你需要做什么。这是一个有趣的问题,但在实现安心方面却是一个红鲱鱼。

【讨论】:

  • 鉴于很多用户通过移动设备访问网络,我可以安全地假设普通 Android 用户的浏览器在内存中加载一千个对象不会有问题吗?
  • 我有点希望我的最后一段能激发灵感。我的主要观点是要强调这样一个事实,即向客户端发送大量数据(我认为其中大部分是多余的)有点乏味。我实际上无法想到用户在一页上需要这么多数据的场景。从历史上看,每当应用程序需要如此多的修饰时,它都会被打包为本地应用程序。你能证明需要这个所谓的“数组”吗?
  • 理由是我不必管理数据库并增加额外的复杂性;对象数组要简单得多,我会使用 JavaScript 来操作数据视图,而不是使用传统的数据库函数进行过滤和排序。 100 个对象的成本约为 14KB。在 1000 时,这个数字将达到 140KB。这听起来像是要加载到客户端上,所以我想知道它将开始影响性能的大小。
  • 要明确一点,我的观点是不同机器上的性能会有所不同,所以它是一个不可知的变量。我理解为什么你想这样做,但我仍然在努力理解什么类型的应用程序需要客户端下载这么大的数组...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多