1

数据库是用于记忆的合理数据结构吗?当需要缓存极其大量的数据时,一个普通的软件在内存中主动维护可能是不合理的。数据库可以轻松存储计算结果以供以后使用,这意味着可以随时停止和开始计算,而不会影响程序的进度。如果数据库是共享的,处理也可以分布在多个系统(计算机集群)之间。

我唯一的保留是查询数据库引起的延迟可能会影响算法性能,尤其是当算法非常快速地处理许多排列时。当然,只有当算法/应用程序的空间复杂度非常高(千兆字节)时,才需要数据库记忆。有什么想法吗?

4

1 回答 1

3

如果您担心要在单台机器上回答大数据,那么答案几乎肯定是NO! 而在现代硬件上,如果答案不是“否”,那么要么计算有模式,要么计算应该被裁定为不可行。但是有几种变化是有意义的。

记忆的胜利在于重新计算的成本不仅仅是获取你以前的答案。但是,如果您的答案适合 RAM,那么使用数据库不会有任何好处,因为将存储保存在内存中会更快。因此,数据库唯一有趣的情况是答案不适合 RAM。

让我们假设,为了论证,每个键/值对占用高达 640 字节。让我们假设您有 64 GB 的 RAM 可供您使用。因此,为了使其不适合 RAM,您需要超过 1 亿个事实,这些事实是随机创建/访问的。但是,让我们考虑实际的硬件。这些事实,当它们不适合 RAM 时,存储在硬盘驱动器中。硬盘以 6k RPM 或每秒 100 次的速度旋转。这使得获取/存储随机数据的时间平均为 1/200 秒(平均而言,您必须中途旋转才能找到数据)。因此,在您填充数据结构后,再次随机访问它需要 1 亿 * 0.005 秒 = 500,000 秒,即近 590 天。我们' 仅仅需要数年时间才能访问数据(更不用说创建数据了),而这些数据正危险地接近硬件故障之间的平均时间。(顺便说一句,我们可以在这里利用一些并行性,硬盘驱动器可以一次寻找他们正在寻找的几个磁盘扇区,但这是有限的,不会节省你的时间。)

道德是随机访问磁盘上的大型数据集是不可行的。即使你在它前面放了一个数据库。硬盘驱动器不是 RAM,因此不应这样认为。

但一切都没有丢失。

数据库有意义的一个场景是您对分布式计算的建议。如果您的计算步骤很昂贵,memoized 调用相对较少,并且数据可以放在内存中,那么数据库非常方便。对数据库的调用将很快(数据在内存中),您不能简单地将数据保存在本地硬盘上(您的数据分布在多台机器上以使用 CPU,因此没有共享硬盘),并且数据库可能很方便,因为它在那里。(我以前也这样用过数据库,很开心。)

但是在这种情况下,数据库只是一个键/值存储。虽然 SQL 数据库可以工作,但您可能需要考虑非 SQL 解决方案。而且,一旦您使用非 SQL 解决方案,您就可以选择数据存储,其中数据已被分片,以便所有数据都适合 RAM,无论您拥有多少数据。(是的,你也可以对关系数据库进行分片。eBay 是我知道的一家公司的一个很好的例子,但是一旦你这样做了,你往往会失去它的“关系”部分。是的,我知道有几家公司声称不这样做,他们的主张带有重要的警告。)

实际上,当您进行 Google 搜索时,您所运行的只是这种分片数据存储,其中包含对许多问题的基本记忆答案,这些问题包括哪些页面匹配哪些关键词,以及哪些页面最相关。没有记忆,他们永远做不到。但如果他们不得不去硬盘驱动器寻找答案,他们也永远无法真正做到这一点。(他们也没有使用 SQL ......)

于 2012-04-10T03:31:56.080 回答