Clickhouse系列之整合MongoDB数据源

847 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

前言

在实际应用中,Mongodb是用的挺多的,有可能我们在掘金写的文章就是Mongodb做存储。那我们先来了解下什么是Mongodb?我们先来看看官网给的一个简单介绍:

A record in MongoDB is a document, which is a data structure composed of field and value pairs. MongoDB documents are similar to JSON objects. The values of fields may include other documents, arrays, and arrays of documents.

从这个英文介绍我们可以知道:

  • MongoDB将数据存储为文档,数据结构由键值(key=>value)对组成;
  • MongoDB文档类似于JSON对象。字段值可以包含其他文档、数组和文档数组

当然除了这些,mongodb还有其他的特点:

  • MongoDB是用C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
  • 在高负载情况下,添加更多节点可以确保服务器性能。
  • MongoDB旨在为web应用程序提供可扩展的高性能数据存储解决方案。

现在我们粗略了解到了Mongodb,现在问题来了,Mongdb这么好,为什么还需要将其数据整合进Clickhouse中呢?

正文

其他数据源整合进Clickhouse,其实是为了业务的分离,Mongodb的存储是属于业务数据,而Clickhouse属于大数据部分,它不应该直接去操作Mongodb,否则在业务层也无法实现低内聚,高耦合的一个效果。

Mongodb引擎简介

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

建表详情
CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
    name1 [type1],
    name2 [type2],
    ...
) ENGINE = MongoDB(host:port, database, collection, user, password [, options]);

引擎参数介绍:

  • host:port—MongoDB服务器地址。
  • database—MongoDB数据库名称。
  • collection-MongoDB集合名称。
  • user—MongoDB用户。
  • password—用户密码。
  • options-MongoDB连接字符串选项(可选参数)
案例实操

a) Mongodb创建数据

# 创建表
db.createCollection('simple_table');
# 插入数据
db.user.insert({_id:5,name:'zhaos'});

b) Clickhouse创建Mongodb引擎表

CREATE TABLE mongo_table
(
    key UInt64,
    data String
) ENGINE = MongoDB('mongo1:27017', 'test', 'simple_table', 'testuser', 'clickhouse');

c) 查询测试

SELECT COUNT() FROM mongo_table;

总结

本节主要讲解了什么是Mongodb,以及mongo的特点,其次解释了对于为何需要将Mongo和Clickhouse结合的原因,这不仅是业务层面,也是架构层面的考虑。最后我们对于创建Mongodb引擎的参数的一个详解,同时进行了一次实操测试。【欢迎大家留言讨论并关注!!!你们的支持是我创作前进的动力。】