通过随机访问我不意味着选择一个随机记录,
随机访问是
能够在相同的时间内获取所有记录,与从数组中获取值的方式相同
来自维基百科:http://en.wikipedia.org/wiki/Random_access
我的目的是存储一大堆字符串,一个对于内存而言太大的字符串 但仍然可以获得数组的好处或随机访问权。
我通常使用MySQL,但它似乎只有B-Tree和Hash索引类型。
我没有看到为什么不可能实施这样的事情的原因 索引将类似于数组,从零开始并递增1。
我想简单地通过索引获取字符串,而不是根据字符串获取索引。 目标是提高绩效。我也无法控制字符串的顺序 将被访问,它将是一个远程数据库服务器,将不断接收索引 客户端并返回该索引的字符串。
有解决方法吗?
p.s我不认为这是Random-access container that does not fit in memory?的副本 因为在那个问题上他除了随机访问之外还有其他要求
答案 0 :(得分:3)
根据您的定义,如果您只是使用SSD来存储数据,它将允许您称之为随机访问(即跨数据集的统一访问速度)。顺序访问比随机访问便宜的事实来自于对磁盘的顺序访问比随机访问要快得多(并且任何数据库都试图最好地弥补这一点,顺便说一句)。
也就是说,即使RAM访问也不统一,因为caching和NUMA导致顺序访问更快。因此,无论如何,统一访问都是一种错觉,这就引出了一个问题,为什么你一直坚持这样做。即你认为慢速随机访问会出错 - 它可能仍然足够快你的用例。
答案 1 :(得分:1)
你说的是时间不变,但你提到了一个独特的递增主键。
除非这样的键是无间隙的,否则你不能将它用作偏移量,所以你仍然需要某种结构来查找实际的偏移量。
通过偏移查找记录通常不是特别有用,因为您通常希望通过一些更友好的方法找到它,这将总是涉及索引。搜索B-Tree索引是最坏情况O(log n),这是非常好的。
假设您只有一个字符串数组 - 将其存储在固定长度记录的磁盘文件中,并使用文件系统寻找您想要的偏移量。
然后针对数据库查找进行基准测试。