2011-08-22 53 views
1

通过随机访问我意味着选择一个随机记录,
随机访问是在相同的时间,以获取所有记录 能力,
以同样的方式值从数组中取出。
维基百科:http://en.wikipedia.org/wiki/Random_access是否有一个实现随机访问的数据库引擎?

我的目的是要存储一个非常大的字符串数组,一个是过大的内存。
但仍然有好处或随机访问阵列。

我通常使用MySQL,但它似乎只有B树和散列索引类型。

我不明白为什么它不可能实现这样的事情。
索引将像从数组开始,从零开始并递增1.

我想简单地通过其索引获取字符串,而不是根据字符串获取索引。 目标是提高性能。我也无法控制字符串 将被访问的顺序,它将是一个远程数据库服务器,它将不断接收来自 客户端的索引并返回该索引的字符串。

有没有解决方案呢?

PS我不事这是Random-access container that does not fit in memory?
重复因为这样的问题,他有不同的考虑你的定义,如果你只是使用SSD用于存储数据的随机存取

+0

如果您存储的字符串太长而无法放入数据库中的内存中,则会出错。令人难以置信的错误。 – Layke

+0

强调错误。;) – Layke

+0

你是否希望能够从数据库中随机选择一条记录?比如说如何显示一个随机的证言? – Ben

回答

1

你在谈论恒定时间,但你提到了一个独特的递增主键。

除非这样的键是无缝的,否则不能用它作为偏移量,所以你仍然需要某种结构来查找实际的偏移量。

通过偏移量查找记录通常不会特别有用,因为您通常会希望通过更友好的方法来找到它,该方法总是会涉及索引。搜索B树索引最坏的情况是O(log n),这非常好。

假设您只有一个字符串数组 - 将其存储在固定长度记录的磁盘文件中,并使用文件系统查找所需的偏移量。

然后以数据库查找为基准。

+0

是的,它只是一串字符串,索引是无缝的。对不起,如果我不清楚,我更新了这个问题。 – fiftyeight

+0

这两个答案都非常好,但是使用文件系统和基准对数据库查找的想法是我计划要做的。 – fiftyeight

3

其他需求,它会允许你称之为随机访问(即跨数据集的统一访问速度)。顺序访问比随机访问更便宜的事实来自顺序访问磁盘比随机访问快得多的事实(并且任何数据库都试图最好弥补这一点,顺便说一句)。

即是说,由于cachingNUMA由于顺序访问速度更快,所以即使RAM访问也不均匀。如此均匀的访问无论如何都是一种错觉,这引发了一个问题,为什么你坚持要把它放在第一位。即当您的随机访问速度很慢时,您认为会出错 - 对于您的用例来说,它可能仍然足够快。

+0

意图是只需根据其索引尽可能快地提取字符串。我虽然认为随机访问是最快的访问方式,但是你能否指出一个我可以读取随机访问与顺序访问的来源,其中顺序访问被认为是更快的?例如在维基百科,听起来像随机访问在这种情况下更快http://en.wikipedia.org/wiki/Random_access – fiftyeight

+0

你在这里混淆了概念。本文所要讲的是提供随机存取与顺序存取的数据结构。以链表为例,这意味着为了获得第n个元素,没有随机访问的可能性,必须遍历前面的n-1个节点,这意味着访问是O(n)与O(1)为阵列。另一件事,在较低的水平上,访问数组元素3,然后34343比访问数组元素3,然后4,然后5慢。 –

+0

好吧,我明白,但我不能真正控制元素的顺序被访问,我想要的是O(1)效率。 – fiftyeight