当前位置:   article > 正文

ClickHouse 集成MongoDB、Redis_clickhouse mongodb

clickhouse mongodb

一、MongoDB

MongoDB引擎是只读表引擎,它允许从远程MongoDB集合读取数据(SELECT查询)。引擎仅支持非嵌套的数据类型。不支持INSERT查询。

1、创建表

  1. CREATE TABLE [IF NOT EXISTS] [db.]table_name
  2. (
  3. name1 [type1],
  4. name2 [type2],
  5. ...
  6. ) ENGINE = MongoDB(host:port, database, collection, user, password [, options]);

Engine Parameters

  • host:port — MongoDB server address.

  • database — Remote database name.

  • collection — Remote collection name.

  • user — MongoDB user.

  • password — User password.

  • options — MongoDB connection string options (optional parameter).

2、示例

ClickHouse中创建一个表,允许从MongoDB集合中读取数据:

  1. CREATE TABLE mongo_table
  2. (
  3. key UInt64,
  4. data String
  5. ) ENGINE = MongoDB('mongo1:27017', 'test', 'simple_table', 'testuser', 'clickhouse');

要从SSL安全的MongoDB服务器读取:

  1. CREATE TABLE mongo_table_ssl
  2. (
  3. key UInt64,
  4. data String
  5. ) ENGINE = MongoDB('mongo2:27017', 'test', 'simple_table', 'testuser', 'clickhouse', 'ssl=true');

 查询

  1. SELECT COUNT() FROM mongo_table;
  1. ┌─count()─┐
  2. 4
  3. └─────────┘

您还可以调整连接超时:

  1. CREATE TABLE mongo_table
  2. (
  3. key UInt64,
  4. data String
  5. ) ENGINE = MongoDB('mongo2:27017', 'test', 'simple_table', 'testuser', 'clickhouse', 'connectTimeoutMS=100000');

二、Redis

该引擎允许将ClickHouse与Redis集成。对于Redis采用的kv模型,我们强烈建议您只通过点的方式进行查询,例如其中k=xx或其中k在(xx,xx)中。

1、创建表

  1. CREATE TABLE [IF NOT EXISTS] [db.]table_name
  2. (
  3. name1 [type1],
  4. name2 [type2],
  5. ...
  6. ) ENGINE = Redis(host:port[, db_index[, password[, pool_size]]]) PRIMARY KEY(primary_key_name);

 引擎参数

  • host:port-Redis服务器地址,可以忽略端口,默认使用Redis端口6379。
  • db_index-Redis数据库索引范围从0到15,默认为0。
  • password-用户密码,默认为空字符串。
  • pool_size-Redis最大连接池大小,默认为16。
  • primary_key_name—列列表中的任何列名。

必须指定primary,它只支持主键中的一列。主键将以二进制形式序列化为Redis密钥。
主键以外的列将以二进制形式按相应顺序序列化为Redis值。
关键字等于或筛选中的查询将优化为Redis中的多关键字查找。如果查询没有筛选关键字,则会进行全表扫描,这是一项繁重的操作。

2、示例

在ClickHouse中创建一个表,允许从Redis读取数据:

  1. CREATE TABLE redis_table
  2. (
  3. `k` String,
  4. `m` String,
  5. `n` UInt32
  6. )
  7. ENGINE = Redis('redis1:6379') PRIMARY KEY(k);

Insert

INSERT INTO redis_table Values('1', 1, '1', 1.0), ('2', 2, '2', 2.0);

Query

SELECT COUNT(*) FROM redis_table;
  1. ┌─count()─┐
  2. 2
  3. └─────────┘
SELECT * FROM redis_table WHERE key='1';
  1. ┌─key─┬─v1─┬─v2─┬─v3─┐
  2. 1111
  3. └─────┴────┴────┴────┘
SELECT * FROM redis_table WHERE v1=2;
  1. ┌─key─┬─v1─┬─v2─┬─v3─┐
  2. 2222
  3. └─────┴────┴────┴────┘

Update

请注意,主键无法更新。

ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';

Delete:

ALTER TABLE redis_table DELETE WHERE key='1';

Truncate:

异步刷新Redis数据库。此外,Truncate支持SYNC模式。

TRUNCATE TABLE redis_table SYNC;

3、局限性

Redis引擎也支持扫描查询,例如where k>xx,但有一些限制:

  • 扫描查询可能会在重新哈希时产生一些重复的密钥,这种情况非常罕见。请参阅Redis扫描中的详细信息
  • 在扫描过程中,可以创建和删除密钥,因此生成的数据集不能代表有效的时间点。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/583119
推荐阅读
相关标签
  

闽ICP备14008679号