clickHouse-golang
clickHouse优势与劣势
ClickHouse和传统的MySQL在设计和使用场景上有一些显著的区别,因此它们各自具有不同的优势和劣势。
ClickHouse的优势:
分布式架构:ClickHouse是为大数据分析而设计的分布式列存储数据库,可以方便地处理海量数据并支持高并发查询。
高性能:ClickHouse在数据分析场景下具有出色的查询性能,特别是针对聚合查询和大规模数据集的查询。
列存储:ClickHouse采用列存储结构,适合于大规模数据的聚合查询,能够显著减少I/O操作,提高查询速度。
优化查询引擎:ClickHouse针对大规模数据分析场景进行了优化,支持高效的数据压缩和并行查询。
灵活的水平扩展:ClickHouse易于水平扩展,可以通过添加更多的节点来增加存储容量和查询吞吐量。
ClickHouse的劣势:
不适合OLTP场景:相对于传统的关系型数据库(如MySQL),ClickHouse不适合用于需要频繁更新和事务处理的OLTP场景。
复杂性:ClickHouse的配置和管理相对复杂,特别是对于初学者来说,可能需要花费一些时间来学习和理解其工作原理和最佳实践。
功能较为专一:ClickHouse更专注于大规模数据的分析查询,对于其他类型的数据库操作(如事务处理)支持较弱。
golang操作clickHouse
package main
import (
"database/sql"
"fmt"
_ "github.com/ClickHouse/clickhouse-go"
)
var connect *sql.DB
func initDb() {
conn, err := sql.Open("clickhouse", "tcp://localhost:9000?username=root&password=123456&database=default&block_size=4096")
if err != nil {
fmt.Println("连接失败:", err)
return
}
connect = conn
}
func createTable() {
_, err := connect.Exec("CREATE TABLE bike (id Int32, value String) ENGINE = Memory")
if err != nil {
fmt.Println("创建表失败:", err)
return
}
}
func Insert() {
tx, err := connect.Begin()
if err != nil {
fmt.Println("开启事务失败:", err)
return
}
stmt, err := tx.Prepare("INSERT INTO bike (id, value) VALUES (?, ?)")
if err != nil {
fmt.Println("准备插入语句失败:", err)
return
}
_, err = stmt.Exec(1, "特斯拉")
if err != nil {
fmt.Println("插入数据失败:", err)
return
}
_, err = stmt.Exec(2, "小米汽车")
if err != nil {
fmt.Println("插入数据失败:", err)
return
}
err = tx.Commit()
if err != nil {
fmt.Println("提交事务失败:", err)
return
}
}
func QuerySelect() {
rows, err := connect.Query("SELECT id,value FROM bike")
if err != nil {
fmt.Println("查询数据失败:", err)
return
}
defer rows.Close()
type Bike struct {
Id int `json:"id"`
Value string `json:"value"`
}
for rows.Next() {
u := Bike{}
err = rows.Scan(&u.Id, &u.Value)
if err != nil {
fmt.Println("扫描结果失败:", err)
return
}
fmt.Println(u)
}
}
func main() {
initDb()
//createTable()
//Insert()
QuerySelect()
}
clickHouse-golang的更多相关文章
- golang sql database drivers
https://github.com/golang/go/wiki/SQLDrivers SQL database drivers The database/sql and database/sql/ ...
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
- 记一次golang的内存泄露
程序功能 此程序的主要功能是将文件中数据导入到clickhouse数据库中. [问题描述] 服务器内存每隔一段时间会耗尽 [问题分析] 由于使用的是go语言开发的,所以采用了业界流行的工具pprof. ...
- 用golang开发系统软件的一些细节
用golang开发系统软件的一些细节 作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 (本文的pdf版本) ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- 说说Golang的使用心得
13年上半年接触了Golang,对Golang十分喜爱.现在是2015年,离春节还有几天,从开始学习到现在的一年半时间里,前前后后也用Golang写了些代码,其中包括业余时间的,也有产品项目中的.一直 ...
- TODO:Golang指针使用注意事项
TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...
- Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
- golang struct扩展函数参数命名警告
今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...
- golang语言构造函数
1.构造函数定义 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.特别的一个类可以有多个构造函数 ,可根据其参数个 ...
随机推荐
- 【python】调用钉钉机器人发起通知
有时候需要做个某些服务的状态监控,用钉钉机器人发通知挺方便的.可以用shell脚本配合crontab检测状态,检测到异常就调用python脚本发起告警. python内容 此处用的python3,需要 ...
- 小版本更新kubernetes
小版本更新kubernetes 背景 最近一段时间躺平了没有更新我的博客文档.感谢各位小伙伴一直以来的支持. 此脚本基于 https://github.com/cby-chen/Kubernetes/ ...
- 利用pytorch自定义CNN网络(四):损失函数和优化器
本文是利用pytorch自定义CNN网络系列的第四篇,主要介绍如何训练一个CNN网络,关于本系列的全文见这里. 笔者的运行设备与软件:CPU (AMD Ryzen 5 4600U) + pytorch ...
- 【技术积累】Linux中的命令行【理论篇】【八】
basename命令 命令介绍 在Linux中,basename命令用于从给定的路径中提取文件名或目录名.它的语法如下: basename [选项] [路径] 命令介绍 选项:-s, --suffix ...
- 使用MediatR实现CQRS
CQRS和中介者模式 MediatR库主要是为了帮助开发者快速实现两种软件架构模式:CQRS和Mediator.这两种架构模式看上去似乎差不多,但还是有很多区别的. CQRS CQRS是Command ...
- vite 找不到依赖模块:[plugin:vite:dep-pre-bundle]
问题描述: 运行项目时,出现[plugin:vite:dep-pre-bundle] 错误.这种问题一般为依赖的包未正常配置相关字段,导致vite无法找到包的入口. 遇到这种模块内.找不到引用模块的, ...
- IDA的使用2
IDA的使用2 string类型的选择 Rename 要注意如果再namelist和public name里面是不能重名 操作数 这个主要和开发结合精密, change sign-改变符号 bitwi ...
- 【技术积累】Linux中的命令行【理论篇】【十】
bunzip2 命令说明 bunzip2命令是Linux系统中的一个用于解压缩文件的命令.它可以解压缩使用bzip2算法压缩的文件,将其恢复为原始的未压缩文件. 命令介绍 bunzip2命令的语法如下 ...
- Java 设计模式实战系列—单例模式
本文首发公众号:小码A梦 单例模式是设计模式中最简单一个设计模式,该模式属于创建型模式,它提供了一种创建实例的最佳方式. 单例模式的定义也比较简单:一个类只能允许创建一个对象或者实例,那么这个类就是单 ...
- redis基本数据类型 SortedSet
SortedSet命令练习 将班级的下列学生得分存入Redis的SortedSet中:Jack 85, Lucy 89, Rose 82, Tom 95,Jerry 78, Amy 92, Miles ...