我开始使用QuestDB并尝试使用ILP客户端发送数据。我做了一个这样的表格:
CREATE TABLE 'trades' (
symbol SYMBOL,
side SYMBOL,
price DOUBLE,
amount DOUBLE,
timestamp TIMESTAMP
) timestamp (timestamp) PARTITION BY NONE BYPASS WAL;
我使用Python客户端发送,如下所示:
from questdb.ingress import Sender, TimestampNanos
conf = f'http::addr=localhost:9000;'
with Sender.from_conf(conf) as sender:
sender.row(
'trades',
symbols={'symbol': 'ETH-USD', 'side': 'sell'},
columns={'price': 2615.54, 'amount': 0.00044},
at=TimestampNanos.now())
sender.flush()
但是当我发送它时,我收到一个错误,说我无法将数据插入到非 WAL 表中。我该如何解决这个问题?
默认情况下,ILP 客户端使用 HTTP 传输将数据发送到 QuestDB。 ILP/HTTP 连接器仅与 WAL 表兼容。如果您希望将数据发送到非 WAL 表,则应该使用 ILP/TCP,只需对配置字符串进行简单更改即可对其进行配置:
conf = f'tcp::addr=localhost:9009;'
在大多数情况下,应该首选 WAL 表,因为它们支持多个协议的并发摄取,并且可以更好地处理无序数据。
此外,使用 HTTP 传输进行 ILP 提交可提供事务性和错误处理,从而更轻松地发送数据并保证幂等性。使用 TCP 传输,可以进行部分写入或断开连接,而不会出现有用的客户端错误。
如果您遇到 WAL 表问题,您应该联系 QuestDB 支持寻求帮助!