对250万条记录的数据集进行简单查询

时间:2015-01-14 17:05:15

标签: xml excel ms-access csv offline

我有一个以逗号分隔的文本文件存储的数据集(id,reference),每个ID与5个引用中的1个相关联。 e.g。

1B3242MK,A 
2C003212KL,S
L001DH728,A

我有一个使用php和MySQL的工具的网络版,当你输入一个id时,会根据引用返回一个网址。例如。

A,google.com
C,bbc.co.uk
L,twitter.com
R,facebook.com
S,instagram.com

我需要做的是创建一个独立版本供离线使用。我设置了一个excel电子表格,用户输入ID并通过VLOOKUP中的VLOOKUP返回URL,但遗憾的是excel只能处理1,048,000行,目前数据集为220万行(和30Mb)。

我无法确定最终用户是否可以访问,但我想知道我是否可以通过访问导出为XML然后通过浏览器进行查询。

知道我怎么能这样做吗?

2 个答案:

答案 0 :(得分:1)

考虑到你拥有的行数,我不会看到excel或XML解决你的问题。

我会考虑创建一个带有嵌入式Sqlite / hsqldb的简单程序来解决这个问题。出于速度原因,您需要一个有效的索引来执行查询,因此使用数据库将是您的最佳选择。

编写一个程序,批量插入数据并将其存储在文件中。设置程序以将db filename作为参数,以便您可以使用多个这些文件数据库进行测试和实际使用。

我会将其设置为2个表,与您描述的方式相同,并将ID保留为键(假设它是唯一的)。

现在你应该能够编写一个程序来接受和识别,查询数据库并以合适的性能显示结果。

HTH

答案 1 :(得分:0)

在Excel中,我们可以解决行限制:

  1. 使用一些有效的标准来分隔你的庞大数据库中的两个或多个部分(这基本上是一个哈希函数,见下文)。

  2. 假设您有3个部分,将它们放在3个单独的工作表中。

  3. 将VLOOKUP命令转换为三个命令,每个命令对应一个,并使用几个IF来指向正确的工作表

    的伪代码:

    IF(group1, (VLOOKUP on Sheet1), IF(group2, (VLOOKUP on Sheet2), (VLOOKUP on Sheet3)))

  4. 要选择要使用的条件,要拆分数据(然后找到它),您必须进行试验。我会从第一个角色开始分离,类似这样:

    ID's starting with digits or letters A to F go in group 1
    ID's starting with letters G-Q go in group 2
    ID's starting with letters R to Z go in group 3
    

    看看这是否为您的数据创建了一个平衡的哈希函数(给出相当相等的组),或者根据自己的喜好进行调整(例如,使用第二个字符而不是第一个字符)。

    性能提示:如果您的数据是静态的,请在Excel中对其进行排序,并使用VLOOKUP并将第四个参数is_sorted设置为TRUE。如此多的行,这应该会产生巨大的差异。