Performance 存储1万亿行信息的最佳方式
我正在计算,结果文本文件现在有288012413行,有4列。样本列:Performance 存储1万亿行信息的最佳方式,performance,storage,space,Performance,Storage,Space,我正在计算,结果文本文件现在有288012413行,有4列。样本列: 288012413; 4855 18668 5.5677643628300215 该文件的容量接近12GB 那太不合理了。这是纯文本。有没有更有效的方法?我只需要大约3位小数,但是限制器会节省很多空间吗?将第4个字段减少到3位小数会将文件减少到8GB左右。将第4个字段减少到3位小数会将文件减少到8GB左右。如果只是阵列数据,我会研究类似HDF5的内容: 该格式受大多数语言支持,具有内置压缩功能,并且得到了很好的支持和广泛使
288012413; 4855 18668 5.5677643628300215
该文件的容量接近12GB
那太不合理了。这是纯文本。有没有更有效的方法?我只需要大约3位小数,但是限制器会节省很多空间吗?将第4个字段减少到3位小数会将文件减少到8GB左右。将第4个字段减少到3位小数会将文件减少到8GB左右。如果只是阵列数据,我会研究类似HDF5的内容:
该格式受大多数语言支持,具有内置压缩功能,并且得到了很好的支持和广泛使用。如果它只是数组数据,我将研究类似HDF5的内容: 该格式受大多数语言支持,具有内置压缩功能,并且得到了良好的支持和广泛使用。好
- 第一列看起来很像行号——如果是这样的话,你可以去掉它,每行大约节省11个字符
- 如果只需要大约3位小数,则可以舍入/截断最后一列,每行可能再节省12个字符
- 第一列看起来很像行号——如果是这样的话,你可以去掉它,每行大约节省11个字符
- 如果只需要大约3位小数,则可以舍入/截断最后一列,每行可能再节省12个字符
如果文件仅用于存储结果,您可能还需要研究压缩该文件。好吧,如果文件太大,并且您正在进行的计算需要任何精度的数字,那么您将不需要限制器。这可能弊大于利,对于12-15GB的文件,这样的问题将很难调试。我会使用一些压缩工具,比如GZIP、ZIP、BlakHole、7ZIP或类似的东西来压缩它
另外,您使用的是什么编码?如果您只是存储数字,那么您所需要的只是ASCII码。如果您使用的是Unicode编码,那么与ASCII相比,文件的大小将增加一倍到四倍。好吧,如果文件那么大,并且您进行的计算需要任何精度的数字,那么您就不需要限制器了。这可能弊大于利,对于12-15GB的文件,这样的问题将很难调试。我会使用一些压缩工具,比如GZIP、ZIP、BlakHole、7ZIP或类似的东西来压缩它
另外,您使用的是什么编码?如果您只是存储数字,那么您所需要的只是ASCII码。如果您使用的是Unicode编码,那么与ASCII相比,文件的大小将翻倍到四倍。继续使用MySQL数据库
- MSSQL express的限制为4GB
- MS Access的限制为4 GB
因此,这些选择已经过时。我认为,使用像mysql或sSQLLite这样的简单数据库而不进行索引将是最好的选择。无论如何,使用数据库访问数据可能会更快,而且文件大小可能更小。继续使用MySQL数据库
- MSSQL express的限制为4GB
- MS Access的限制为4 GB
因此,这些选择已经过时。我认为,使用像mysql或sSQLLite这样的简单数据库而不进行索引将是最好的选择。无论如何,使用数据库访问数据可能会更快,而且文件大小可能更小。如果要将结果用作查找表,为什么要对数字数据使用ASCII?为什么不这样定义一个结构:
struct x {
long lineno;
short thing1;
short thing2;
double value;
}
然后将结构写入二进制文件?由于所有记录的大小都是已知的,因此以后很容易遍历它们。如果要将结果用作查找表,为什么要对数字数据使用ASCII?为什么不这样定义一个结构:
struct x {
long lineno;
short thing1;
short thing2;
double value;
}
然后将结构写入二进制文件?由于所有记录的大小都是已知的,因此以后通过这些记录很容易。就像AShelly一样,但要小一些 假设直线是连续的 结构x{ 短小的东西1; 短小的东西2; short value;//您说的只有3dp。所以存储为固定点n*1000。dp剩下2位 } 保存在二进制文件中 lseek()read()和write()是您的朋友
文件将很大(ish),大约为1.7Gb。与AShelly一样,但更小 假设直线是连续的 结构x{ 短小的东西1; 短小的东西2; short value;//您说的只有3dp。所以存储为固定点n*1000。dp剩下2位 } 保存在二进制文件中 lseek()read()和write()是您的朋友
文件将非常大(ish),大约为1.7Gb。最明显的答案就是“拆分数据”。将它们放在不同的文件中,例如,每个文件有1百万行。NTFS非常擅长处理每个文件夹中成千上万的文件 那你就有号码了