使用C中的大型数据集

时间:2014-04-28 10:40:17

标签: c data-structures dataset bigdata

我有一个超过400万行的文本文件。每行给出道路链接的细节,即开始和结束节点的坐标,节点id,链接ID等。我将首先从文本文件中提取数据为两个数据结构,第一个将保持链接ID和相应的开始和结束节点ID。第二数据结构将保存节点id以及对应节点的x和y坐标。然后,我将研究这两个数据结构,以找到来自给定源和目标节点的路径。

我的C技能变得有点生疏,我想知道考虑到尺寸,存储和访问数据的最佳方法是什么。

非常感谢

1 个答案:

答案 0 :(得分:0)

对我来说听起来不是那么多数据。我会从这样的事情开始:

struct link;
struct node {
    struct link **links;
    int nlinks;
    /* whatever else you need to describe the node. */
};
struct link {
    struct node *n1, *n2;
};

在读取文本文件时,将节点放入树或散列表或其他有效方式查找节点,每行,分配链接,查找开始和结束节点(必要时分配),增长他们的链接数组,将链接插入数组。

最坏的情况是,如果每个链接都有两个唯一的节点,那么你的开销是“链接数”*(2 * sizeof(struct node)+ 2 * sizeof(struct link *)+ sizeof(struct link))一个64位的机器应该是大约256MB的数据加上你想要存储的关于节点的任何其他信息,加上节点的查找表的开销。如果你使用内联avl树,树链接额外24字节,(64位)坐标和节点ID 24字节(如果你需要它们),你仍然需要低于半千兆字节的数据用。

如果节点ID是连续的,您可以使用更少的内存和一个数据结构,因为您可以将节点放在一个数组而不是链接中,只需保存链接另一端的节点ID在最糟糕的情况下你会降到100MB以下。