使用clickhouse映射加快查询速度

clickhouse的Projection是一个比物化视图更好用的功能。

物化视图不好用,如果源表中的数据进行了修改和删除,物化视图中的数据不会变化,如果想达到数据一致,只能先先删除物化视图,然后再重新把历史数据跑进去,在生产环境上是无法忍受的,除非不更新数据。

Projection就很好了,创建完Projection表后,更新和删除数据后,数据是及时更新的。

2022年Projection还属于实验性质,上生产的话,自己把握。

创建Projection例子:

ALTER TABLE default.register   ADD PROJECTION projection_register (
    SELECT date,count( distinct user_id ) user_id
    GROUP BY date
);

创建完Projection后,只会对创建Projection后的数据起作用,对创建Projection前的数据不起作用。

处理历史数据例子:

alter table default.register  MATERIALIZE PROJECTION projection_register;

删除Projection

ALTER TABLE default.register DROP PROJECTION projection_register;

一张源表可以添加多条Projection,clickhouse会自动选择对应的Projection。

创建完Projection后,你的查询可能不会作用,映射起作用的条件有:

1、select语句中出现的字段包括where条件中的字段,都必须在映射语句中出现;

2、如果映射语句中出现了函数,比如toDate(),那么在查询语句中也必须有toDate(),如果映射中没有出现函数,那么查询语句中不能出现函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 VC 中使用内存映射技术可以显著提高对大文件的读写速度。下面是一个简单的示例代码: ```c++ #include <iostream> #include <windows.h> using namespace std; int main() { HANDLE hFile; HANDLE hMapping; LPVOID lpMapping; // 打开文件 hFile = CreateFile("largefile.bin", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { cout << "Failed to open file." << endl; return 1; } // 创建文件映射 hMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); if (hMapping == NULL) { cout << "Failed to create file mapping." << endl; CloseHandle(hFile); return 1; } // 映射文件到内存 lpMapping = MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); if (lpMapping == NULL) { cout << "Failed to map file to memory." << endl; CloseHandle(hMapping); CloseHandle(hFile); return 1; } // 读写文件 char* pFile = (char*)lpMapping; for (int i = 0; i < 4 * 1024 * 1024 * 1024LL; i++) { pFile[i] = i % 256; } // 解除内存映射 UnmapViewOfFile(lpMapping); // 关闭文件映射和文件句柄 CloseHandle(hMapping); CloseHandle(hFile); cout << "Done." << endl; return 0; } ``` 这个示例程序打开一个名为 largefile.bin 的文件,并将其映射到内存中。然后,程序将对文件进行读写操作,最后解除内存映射并关闭文件。在这个示例中,我们使用了一个 4GB 的文件进行测试,程序可以在较短的时间内完成读写操作,而不会出现内存不足的错误。 需要注意的是,内存映射虽然可以提高文件读写速度,但也会占用一定的内存空间。因此,在使用内存映射技术时,需要根据实际情况选择合适的文件大小和内存使用量。同时,需要注意内存映射可能会对程序的稳定性产生影响,特别是在进行大量读写操作时。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangpeng52758

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值