我有2亿条记录,其中一些记录具有可变大小的字段(字符串,可变长度数组等).我需要对它们执行一些过滤器,聚合等(面向分析的查询).
我想把它们全部放在内存中(足以放入一个大盒子里),然后对它们进行线性扫描.我可以采取两种方法,我希望听到您对哪种方法更好的看法,以最大限度地提高速度:
char*和int*等的结构数组来处理可变长度字段你会推荐哪种方法?
更新:使用C.
不幸的答案是"这取决于你没有提供的细节",虽然这是真的,但并不是特别有用.解决这类问题的一般建议是从最简单/最明显的设计开始,然后根据需要进行分析和优化.如果它真的很重要,您可以使用您的确切数据和用例来开始一些非常基本的基准测试,以便更准确地了解您应该采取的方向.
查看一些具体设计及其一般优缺点:
一个大缓冲区
char* pBuffer = malloc(200000000);
Run Code Online (Sandbox Code Playgroud)
静态结构
typedef struct {
char Data1[32];
int Data2[10];
} myStruct;
myStruct *pData = malloc(sizeof(myStruct)*200000000);
Run Code Online (Sandbox Code Playgroud)
动态结构
typedef struct {
char* pData1;
int* pData2;
} myStruct2;
myStruct2 *pData = malloc(sizeof(myStruct2)*200000000);
Run Code Online (Sandbox Code Playgroud)
流
哪个是"最好的"真的取决于你的具体情况......我可以想到每个人都是首选的方法.