我有一个以逗号分隔的文本文件存储的数据集(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然后通过浏览器进行查询。
知道我怎么能这样做吗?
答案 0 :(得分:1)
考虑到你拥有的行数,我不会看到excel或XML解决你的问题。
我会考虑创建一个带有嵌入式Sqlite / hsqldb的简单程序来解决这个问题。出于速度原因,您需要一个有效的索引来执行查询,因此使用数据库将是您的最佳选择。
编写一个程序,批量插入数据并将其存储在文件中。设置程序以将db filename作为参数,以便您可以使用多个这些文件数据库进行测试和实际使用。
我会将其设置为2个表,与您描述的方式相同,并将ID保留为键(假设它是唯一的)。
现在你应该能够编写一个程序来接受和识别,查询数据库并以合适的性能显示结果。
HTH
答案 1 :(得分:0)
在Excel中,我们可以解决行限制:
使用一些有效的标准来分隔你的庞大数据库中的两个或多个部分(这基本上是一个哈希函数,见下文)。
假设您有3个部分,将它们放在3个单独的工作表中。
将VLOOKUP命令转换为三个命令,每个命令对应一个,并使用几个IF来指向正确的工作表
的伪代码:
IF(group1, (VLOOKUP on Sheet1), IF(group2, (VLOOKUP on Sheet2), (VLOOKUP on Sheet3)))
要选择要使用的条件,要拆分数据(然后找到它),您必须进行试验。我会从第一个角色开始分离,类似这样:
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。如此多的行,这应该会产生巨大的差异。