对标mongodb存储类JSON数据文档统计分析详解

 更新时间:2022年06月15日 09:57:47   作者:字母哥博客  
这篇文章主要介绍了对标mongodb存储类JSON数据文档统计分析,只是介绍了简单的查询,其实针对各种统计分析场景,clickhouse提供了超级多的统计分析函数、窗口函数等等,当然针对数组的数据类型也有很多的统计分析函数,需要的朋友可以参考下

一、文档存储的需求

很多的开发者都使用过mongodb,在mongodb中数据记录是以文档的形式存在的(类似于一种多级嵌套SQL的形式)。比如下面的JSON数据结构:dev_ip表示某一台服务器的ip、location字段存放经纬度、meminfo.total和meminfo.userd分别代表内存总量和使用量。

[{
  "dev_ip": "123.46.5.111",
  "location": [39.916527, 116.397128],
  "meminfo": {
    "total": 64,
    "used": 23.2
  }
},
{
  "dev_ip": "123.46.5.112",
  "location": [39.916144, 116.392582],
  "meminfo": {
    "total": 64,
    "used": 27.8
  }
}]

二、建表

存储文档需要使用到Map这种数据类型,在某些比较旧的版本中,Map数据类型还是实验性的,不能直接使用。如果想使用,需要执行set allow_experimental_map_type = 1;
然后我们可以按照JSON的数据结构来建表,location是数组Array数据类型,meminfo是Map数据类型。

CREATE TABLE dev_meminfo (
  dev_ip String,  
  location Array(Float64),
  meminfo Map(String, Float32)
)
ENGINE = MergeTree()
ORDER BY dev_ip;

clickhouse提供了数组类型Array(T),数组类型由多个T元素组成。T可以是任意的基础数据类型,或者也可以是数组类型。如果是数组类型就形成了多维数组,Cickhouse对多维数组的支持有限,所以不建议使用多维数组。数组里面所有的T元素的数据类型必须是一样的,否则会抛出异常。

三、数据入库

在linux环境下,我们可以将JSON数据保存为一个文档,命名如:dev_meminfo.json。然后使用下面的命令行,完成文档JSON数据的入库。jq的作用是将JSON数组及Map从结构中剥离出来,从而符合JSONEachRow要求的输入格式。

cat dev_meminfo.json |jq -c .[] | clickhouse-client --database acaidb -m -u acai --password '<你的密码>'  \
--query="INSERT INTO dev_meminfo FORMAT JSONEachRow"

或者我们可以直接使用INSERT语句来完成数据的单条插入,如下:

INSERT  INTO dev_meminfo FORMAT JSONEachRow {"dev_ip": "123.46.5.112", "location": [39.916144, 116.392582],"meminfo": {"total": 64,"used": 27.8}};

四、查询数据

select * 的方式查询数据:

#  clickhouse-client --database acaidb -m -u acai --password '4rfv$RFV'  --query="SELECT * FROM dev_meminfo"
123.46.5.111    [39.916527,116.397128]  {'total':64,'used':23.2}
123.46.5.112    [39.916144,116.392582]  {'total':64,'used':27.8}

使用字段名称方式查询数据,需要注意的是Ciickhouse的数组的下标是从0开始的,这与我们传统编程开发中的规范是不一致的。

# clickhouse-client --database acaidb -m -u acai --password '4rfv$RFV'  --query="SELECT dev_ip,location[1],location[2],meminfo['total'],meminfo['used'] FROM dev_meminfo"
123.46.5.111    39.916527       116.397128      64      23.2
123.46.5.112    39.916144       116.392582      64      27.8

五、总结

我们看到clickhouse可以代替mongodb进行类JSON文档数据的存储,而且支持SQL查询统计分析,这一点是比较吸引人的。我只是介绍了简单的查询,其实针对各种统计分析场景,clickhouse提供了超级多的统计分析函数、窗口函数等等,当然针对数组的数据类型也有很多的统计分析函数。
更为值得注意的是:笔者看到一些测评文章,clickhouse的的统计分析性能是mongodb的近百倍之多(笔者自己尚未验证,请关注我的专栏后续文章)。但是也不是说clickhouse可以代替mongodb的所有应用场景,至少面向用户的并发请求的场景clickhouse是不满足的,因为clickhouse的定位是数据仓库,主要是面向数据分析OLAP场景,而不是面向用户高并发的联机事务处理OLTP。

到此这篇关于对标mongodb存储类JSON数据文档统计分析的文章就介绍到这了,更多相关mongodb存储类JSON数据文档统计内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MongoDB 入门指南

    MongoDB 入门指南

    这篇文章主要介绍了MongoDB 入门指南的相关资料,需要的朋友可以参考下
    2022-12-12
  • centos离线安装mongodb-database-tools方法详解

    centos离线安装mongodb-database-tools方法详解

    这篇文章主要介绍了centos离线安装mongodb-database-tools方法详解的相关资料,需要的朋友可以参考下
    2022-11-11
  • mongodb实现数组对象求和方法实例

    mongodb实现数组对象求和方法实例

    这篇文章主要给大家介绍了关于mongodb实现数组对象求和的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • MongoDB中的常用操作$push、$pushAll和$pull示例详解

    MongoDB中的常用操作$push、$pushAll和$pull示例详解

    MongoDB从2.2版本开始支持$push操作符,$push是用于在数组中添加一个元素的更新操作符,它将指定的值追加到数组的末尾,本文给大家介绍MongoDB的常用操作$push、$pushAll和$pull,感兴趣的朋友一起看看吧
    2023-12-12
  • MongoDB数据库安装配置、基本操作实例详解

    MongoDB数据库安装配置、基本操作实例详解

    这篇文章主要介绍了MongoDB数据库安装配置、基本操作,结合实例形式详细分析了MongoDB数据库安装配置具体步骤、相关命令与基本操作实现技巧,需要的朋友可以参考下
    2020-01-01
  • springboot整合mongodb changestream的示例代码

    springboot整合mongodb changestream的示例代码

    Chang Stream(变更记录流) 是指collection(数据库集合)的变更事件流,应用程序通过db.collection.watch()这样的命令可以获得被监听对象的实时变更,本文给大家介绍springboot整合mongodb changestream的示例代码,感兴趣的朋友一起看看吧
    2022-02-02
  • Mongodb数据库误删后的恢复方法(两种)

    Mongodb数据库误删后的恢复方法(两种)

    本文给大家分享两种方法来实现Mongodb数据库误删后的恢复,每种方法给大家介绍的都非常详细,需要的朋友参考下吧
    2018-08-08
  • 使用Mongodb实现打卡签到系统的实例代码

    使用Mongodb实现打卡签到系统的实例代码

    这篇文章主要介绍了使用Mongodb实现打卡签到系统的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • MongoDB 用户管理

    MongoDB 用户管理

    这篇文章主要介绍了MongoDB 如何对用户管理,帮助大家更好的理解和使用MongoDB数据库,感兴趣的朋友可以了解下
    2020-09-09
  • MongoDB常用命令小结

    MongoDB常用命令小结

    这篇文章主要介绍了MongoDB的一些常用命令,学习与使用MongoDB数据库的朋友可以参考下
    2013-08-08

最新评论