我编写了以下代码试图解决一个请求类似数组的结构而不使用它们的挑战:
#include <iostream>
int main(){
int x = 132,y = 33,z = 87;
int *i = &x;
std::cout << x << " " << y << " " << z << "\n";
std::cout << &x << " " << &y << " " << &z << "\n";
std::cout << i << " " << i-1 << " " << i-2 << "\n";
std::cout << *i << " " << *(i-1) << " " << *(i-2) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我发现2个变量的地址(&y-&x)之间的区别为-1,我随后调整了代码我不明白为什么最后定义的变量被分配到"之前"(意思是,前一个地址).
老实说,我会想到&y-&x …
我有一个非常大量的数据,格式很糟糕:包含csv
文件的16.4GiB zip 文件.每个都csv
包含像
TYPE,2014-07-02 04:04:23.806,0.94598,0.94607
Run Code Online (Sandbox Code Playgroud)
基本上:
TYPE
(有14种不同类型,未来可以理想地增长)timestamp
(以毫秒为单位)TYPE
当它们接近时,它们的所有浮点数通常具有非常相似的值总共我有3'091'472'167行,所以我们谈的是数十亿.主要操作将循环部分或全部数据集(为了在数据上运行算法),每月插入一次约2千万条记录(但插入数据不是我想要优化的东西) .
理想的解决方案是将它们存储在一个数据库中,以便我可以轻松地查询它们,但是一些粗略的计算表明我需要46GiB和Postgres(可能会因为一些丑陋的技巧而被降到18GiB).
我已经对我拥有的数据进行了一些实验,我发现:生成包含的gzip文件TIMESTAMP,FLOAT1,FLOAT2
会让我~14GiB完全删除时间戳会让我降到~5GiB
节省空间的好方法是以有效的方式存储时间戳.我正在考虑创建一个树结构,其中每个节点都包含一个时间戳数字,其中叶子包含最后一个数字和两个浮点数.
我已经尝试过像druid.io这样的解决方案,但看起来他们正试图优化我的用例不需要的其他东西.
是否有一些我缺少的工具,它正是我想要的?如果没有,什么是存储时间序列数据的有效方法?
谢谢
在检查我正在处理的一些代码的内存使用情况时,我遇到了一个奇怪的问题.
使用foldl
总和一个非常大的列表的元素,我得到一个恒定的内存使用.
使用foldl'
我也得到一个恒定的内存使用(如预期的那样).
使用foldr
内存增长并使我的系统屈膝(没有像我期望的堆栈溢出异常).
触发它所需的最小代码是:
main = print $ foldx (+) 0 [1..100000000000000000000]
foldx是哪个foldl
,foldr
或者foldl'
我的印象是(按照Foldr Foldl Foldl的说法),情况恰恰相反.
我用上述代码设置了一个repo:https: //github.com/framp/hs-fold-perf-test
这里发生了什么?是GHC 8.0.x太聪明了吗?我在macOS Sierra上
谢谢