问题标签 [large-data-volumes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1240 浏览

java - Java 中的 STXXL 等价物

我正在搜索一个为 Java 中的大型数据集设计的集合框架,其行为透明,就像STXXL为 C++ 所做的那样。

它应该透明地交换到磁盘,但比普通的基于操作系统的 VM 交换更有效。StringBuffer/String 替代品将是一大优势。

0 投票
7 回答
195 浏览

java - 您将如何处理创建一个条目比标准实现允许您访问的条目更多的数组或列表

我正在尝试创建一个理论上可以处理的数组或列表,给定足够的硬件等,多达 100^100 个 BigInteger 条目。使用数组或标准列表的问题在于它们只能容纳 Integer.MAX_VALUE 数量的条目。您将如何解决此限制?一个全新的类/界面?列表的包装?完全是另一种数据类型?

0 投票
6 回答
36429 浏览

java - 从大表中检索所有记录时如何避免OOM(内存不足)错误?

我的任务是将一个巨大的表转换为自定义 XML 文件。我将使用 Java 来完成这项工作。

如果我简单地发出“SELECT * FROM customer”,它可能会返回大量数据,最终导致 OOM。我想知道,有没有一种方法可以在记录可用后立即处理,然后在 sql 检索过程中从内存中删除记录?

--- 2009 年 7 月 13 日编辑

让我详细说明我的问题。我有 1 个数据库服务器和 1 个应用程序服务器。当我在应用程序中发出选择查询时,数据将从数据库服务器传输到应用程序服务器。

我相信(如果我错了,请纠正我)ResultSet 需要等到接收到查询中的所有记录。即使我们将 fetch size 设置为 4,对于 1000 条记录的表,我们最终在应用服务器的堆内存中仍然有 1000 条记录,对吗?获取大小仅影响往返数据库服务器的次数。

我的问题是,如何在它到达应用服务器后立即开始处理这 4 条(或任意数量)记录,并处理它以释放应用服务器中的内存?

0 投票
3 回答
125 浏览

language-agnostic - 将扩展有序文件写入磁盘的策略

我是一名核物理学研究生,目前正在从事数据分析程序。数据由数十亿个多维点组成。

无论如何,我正在使用空间填充曲线将多个维度映射到一个维度,并且我正在使用 B+ 树来索引数据页面。每个页面将有一些恒定的最大点数。

当我从原始文件中读取原始数据(数百个演出)并对其进行预处理和索引时,我需要将各个点插入到页面中。显然,页面太多,无法简单地将它们存储在内存中,然后将它们转储到磁盘。所以我的问题是:将页面写入磁盘的好策略是什么,以便当页面达到最大大小并需要拆分时,数据的重新洗牌最少。

根据评论让我减少一点。

我有一个包含有序记录的文件。这些记录被插入到文件中,这些记录太多,无法简单地在内存中执行此操作,然后写入文件。我应该使用什么策略来最小化插入记录时所需的重新洗牌量。

如果这有任何意义,我将不胜感激您可能拥有的任何解决方案。

编辑:
数据是多维空间中的点。本质上是整数列表。这些整数中的每一个都是 2 个字节,但每个整数还有一个额外的 2 个字节与之关联的元数据。所以每个坐标 4 个字节和 3 到 20 个坐标之间的任何位置。所以基本上数据由数十亿个块组成,每个块在 12 到 100 个字节之间。(很明显,4 维的点与 5 维的点在被提取后将位于不同的文件中)。

我正在使用类似于本文中讨论的技术: http ://www.ddj.com/184410998

编辑 2:我有点后悔在这里问这个问题,所以认为它已被正式取消;但这是我不使用现成产品的原因。我的数据是从 3 到 22 维不等的点。如果您将每个点视为简单的列表,您可以将我想如何查询这些点作为与这些数字出现在相同列表中的所有数字。以下是一些低维的示例(并且数据点比正常少得多)示例:数据 237、661、511、1021 1047、661、237 511、237、1021 511、661、1047、1021

所以这对于大多数数据库程序来说是一个困难的小问题,尽管我知道一些可以很好地处理这个问题的存在。

但问题变得更加复杂。并非所有坐标都相同。很多时候,我们只是单独使用 gammasphere 运行,因此每个坐标代表一个 gamma 射线能量。但有时我们将中子探测器插入伽马球或称为微球的探测器系统,或者有时将伽马球中产生的核素导入碎片质量分析仪,所有这些和更多的探测器系统都可以单独使用或与伽马球任意组合使用。不幸的是,我们几乎总是希望能够以类似于上述方式的方式在这些附加数据上进行选择。所以现在坐标可以有不同的含义,如果除了伽马球之外只有微球,那么你就可以用与方程 x + y = n 的正解一样多的方式构成一个 n 维事件。此外,每个坐标都有与之关联的元数据。所以我展示的每个数字都至少有两个额外的数字与之相关,第一个是探测器编号,用于检测事件的探测器,第二个是效率值,用于描述特定伽马射线的次数计数(因为实际检测到进入探测器的伽马射线的百分比,随探测器和能量而变化)。

我真诚地怀疑,任何现成的数据库解决方案都可以在没有大量定制的情况下同时完成所有这些事情并表现良好。我相信花在这上面的时间最好花在编写我自己的解决方案上,更不用说通用的解决方案了。由于失去了一般性,我不需要为任何数据库代码实现删除功能,我不需要建立二级索引来控制不同类型的坐标(只有一组,每个点只计算一次),等等

0 投票
12 回答
8109 浏览

.net - 当元数据在 SQL 数据库中时,存储/检索数百万个文件的最佳方式

我有一个流程,最初将生成 3-4 百万个 PDF 文件,并以 80K/天的速度继续。它们每个都非常小(50K),但我担心的是如何管理我生成的文件总量以便于查找。一些细节:

  1. 生成文件后,我将运行一些其他步骤,并且将有一些服务器参与,因此我需要在生成文件时注意它们。
  2. 生成后,这些文件将通过我编写的查找过程可用。本质上,我需要根据每个文件唯一的订单号来提取它们。
  3. 在任何时候,现有的订单号可能会被重新提交,并且生成的文件将需要覆盖原始副本。

最初,我计划将这些文件全部写入 NAS 上的单个目录,但我意识到这可能不是一个好主意,因为它们有数百万个,Windows 可能无法非常优雅地处理百万个文件查找。我正在寻找一些建议:

  1. 一个文件夹可以吗?这些文件永远不会被列出——它们只会使用 System.IO.File 和我已经确定的文件名来检索。
  2. 如果我创建一个文件夹,我是否可以使用 System.IO.DirectoryWatcher 监视新文件,即使有这么多文件,还是会因为有这么多文件而开始变得迟缓?
  3. 是否应该将它们作为 BLOB 存储在 SQL Server 数据库中?因为我需要通过参考值来检索它们,所以这可能更有意义。

谢谢你的想法!

0 投票
1 回答
1244 浏览

mysql - 启动mysql时是否需要运行mysqlcheck?

我有一个大型(大约 10 GB 和 20 GB 的 innodb 缓冲池)数据库,并且注意到当我启动它时,大约在它运行的前半个小时内,数据库会定期锁定和解锁所有表,这使得它非常不愉快对于在数据库重新启动后的前半小时内尝试访问我们网站的用户。

虽然我不能 100% 确定因果关系,但我注意到数据库锁定和解锁本身的时间与

正在我的数据库服务器上运行。我的问题是在启动 Mysql 时是否真的有必要运行 mysqlcheck(默认情况下在 mysql /etc/init.d/mysql 脚本中)?我在 mysqlcheck 上找到的 Google 结果表明它“修复和优化”表,但我不希望我的表被破坏,而且我对这个实用程序提供的优化优势持怀疑态度。

如果重要的话,我正在运行 Mysql 5.0.32

0 投票
2 回答
198 浏览

google-app-engine - 如何在谷歌应用引擎中使用 put() 将 500 多个条目添加到数据存储区?

我尝试通过调用 db.put() 在列表中添加批量数据。但它仍然偶尔超时。

有人有一些提示吗?

0 投票
2 回答
17075 浏览

web-services - 使用 Web 服务传输大型有效负载的坏主意?

我认为,通过 POST 或 GET 使用REST时可以发送的数据量基本上没有限制。虽然我没有使用过 REST 或 Web 服务,但似乎大多数服务都涉及传输有限数量的数据。如果您想传输 1-5MB 的数据(在任一方向),Web 服务是否被视为一个坏主意?

更新:我们正在考虑通过 REST 服务连接的应用程序是内部应用程序。我们确实可以选择其他连接选项(即:RMI)

0 投票
1 回答
1454 浏览

sql - Oracle:查找预测排名列表的先前记录

嗨,我面临一个难题:

我有一张天气预报表(oracle 9i)(数百万条记录),其组成如下:

在哪里:

  • stationid指可以创建预报的众多气象站之一;
  • forecastdate指预测的日期(仅限日期而不是时间。)
  • forecastintervalforecastdate预测中的小时 (0 - 23)。
  • forecastcreated指做出预测的时间,可以提前很多天。
  • forecastvalue指预测的实际值(顾名思义)。

我需要确定给定stationid和给定forecastdateforecastinterval对的记录,其中 a 的forecastvalue增量超过名义数字(例如 500)。我将在此处显示条件表:

在上述情况下,我想提取第三条记录。这是预测值增加了名义(比如 100)数量的记录。

由于表的庞大规模(数以百万计的记录),并且需要很长时间才能完成(事实上时间很长,以至于我的查询从未返回),因此这项任务被证明是非常困难的。

到目前为止,这是我获取这些值的尝试:

0 投票
5 回答
315 浏览

php - 有没有办法在内存中维护一个 200MB 的不可变数据结构并从脚本中访问它?

我有一个包含 900 万个 IP 的列表,并且使用一组哈希表,我可以创建一个恒定时间函数,如果特定 IP 在该列表中,则返回该函数。我可以用 PHP 做吗?如果是这样,怎么做?