我正在编写一个应用程序,用于绘制财务数据并与此类数据的实时反馈进行交互。由于任务的性质,可能会以一次一笔交易的方式非常频繁地接收实时市场数据。我在本地使用数据库,并且我是唯一的用户。只有一个程序(我的中间件)会将数据插入数据库。我最关心的是延迟——我想尽可能地减少它。出于这个原因,我想避免使用队列(从某种意义上说,我希望缓冲区表来履行该角色)。Clickhouse 为我计算的许多分析预计也是实时的(尽可能)。我有三个问题:
\n问题 1)澄清缓冲区表文档中的一些限制/警告
\n根据 Clickhouse 文档,我了解到许多小型插入至少可以说是次优的。在研究该主题时,我发现缓冲区引擎 [1] 可以用作解决方案。这对我来说很有意义,但是当我阅读 Buffer 的文档时,我发现了一些警告:
\n\n\n请注意,一次一行插入数据是没有意义的,即使对于缓冲区表也是如此。这只会产生每秒几千行的速度,而插入更大的数据块可以每秒产生超过一百万行(请参阅 \xe2\x80\x9cPerformance\xe2\x80\x9d 部分)。
\n
每秒几千行对我来说绝对没问题,但是我担心其他性能考虑因素 - 如果我一次将一行数据提交到缓冲表,我是否应该预期 CPU/内存会出现峰值?如果我理解正确的话,一次向 MergeTree 表提交一行会给合并作业带来大量额外的工作,但如果使用 Buffer Table,这应该不是问题,对吗?
\n\n\n如果服务器异常重启,缓冲区中的数据就会丢失。
\n
据我所知,这是指停电或计算机崩溃之类的事情。如果我正常关闭计算机或正常停止clickhouse服务器,我可以期望缓冲区将数据刷新到目标表吗?
\n问题2)阐明查询的工作原理(常规查询+物化视图)
\n\n\n从缓冲区表读取数据时,将从缓冲区和目标表(如果有)中处理数据。\n请注意,缓冲区表不支持索引。换句话说,缓冲区中的数据被完全扫描,这对于大缓冲区来说可能会很慢。(对于下级表中的数据,将使用其支持的索引。)
\n
这是否意味着我可以对目标表使用查询并期望自动包含缓冲区表数据?或者是相反 - 我查询缓冲表并且目标表包含在后台?如果任一为真(并且我不需要手动聚合两个表),这是否也意味着将填充物化视图?哪个表应该触发物化视图 - 磁盘表还是缓冲表?或者以某种方式两者兼而有之?
\n我非常依赖物化视图,并且需要它们实时更新(或尽可能接近)。实现这一目标的最佳策略是什么?
\n问题3)当我在刷新数据时查询数据库时会发生什么?
\n我在这里主要关心的两个问题是:
\n感谢您的时间。
\n[1] https://clickhouse.tech/docs/en/engines/table-engines/special/buffer/ …
我正在尝试使用nom的tuple功能。该文档提供了以下示例:
use nom::sequence::tuple;
use nom::character::complete::{alpha1, digit1};
let parser = tuple((alpha1, digit1, alpha1));
Run Code Online (Sandbox Code Playgroud)
当我尝试时,出现编译错误:
error[E0283]: type annotations needed
--> src/main.rs:20:18
|
20 | let parser = tuple((alpha1, digit1, alpha1));
| ------ ^^^^^ cannot infer type for type parameter `I` declared on the function `tuple`
| |
| consider giving `parser` a type
|
Run Code Online (Sandbox Code Playgroud)
如果我想为变量添加一个类型,它会是什么?我知道它必须是 的某种变体FnMut,但我不确定它到底是如何工作的。
Cargo.toml
[dependencies]
nom = ">=5.0"
Run Code Online (Sandbox Code Playgroud) 我有一个 PySide2 应用程序,它使用 QML 来显示用户界面。该应用程序从命令行工作。我也可以启动它以及在 QtCreator 中调试它。但是,当我尝试运行 QmlProfiler 时,我看到以下错误:
:-1: error: /home/username/code/project/venv/bin/python: Error while finding module specification for 'ljsdebugger=file:/tmp/QtCreator-kVUFuF/qtcreator-freesocket.XgLEKq,block,services:CanvasFrameRate,EngineControl,DebugMessages,DebugTranslation' (ModuleNotFoundError: No module named 'ljsdebugger=file:/tmp/QtCreator-kVUFuF/qtcreator-freesocket')
Run Code Online (Sandbox Code Playgroud)
我检查了项目的工具包设置,它使用了所有默认值。我在网上找不到任何与此错误消息相关的文章/讨论。如何解决这个问题?