0
点赞
收藏
分享

微信扫一扫

golang realize数据库简介

存储与数据库简介

一个提供了读写,控制类接口,能够安全有效的把数据持久化的软件,就可以成为存储系统。

- 存储系统概览

  • 存储系统特点
  • 性能敏感
  • 既简单又复杂
  • 容易受硬件影响
  • 存储器层级结构
  • 单机存储栈
  • RAID技术
  • 单块大容量磁盘的价格>多块小容量的磁盘
  • 单块磁盘的写入性能<多块磁盘的并发写入性能
  • 单块磁盘的容错能力有限,不够安全
  • 数据库系统概览
  • 关系型数据库特点
  • 结构化数据友好
  • 支持事务
  • 支持复杂查询语言

非关系型数据库特点

  • 半结构化数据友好
  • 可能支持事务
  • 可能支持复杂查询语言
  • 数据库 vs 经典存储
  • 事务能力
  • 复杂的查询能力
    数据库使用方式
  • 以SQL为例,要操作数据时候,支持以下操纵
  • Insert
  • update
  • select
  • delete
  • where子句
  • Groupby
  • orderby

主流产品剖析

  • 单机存储
  • 分布式存储
  • 单机关系型数据库
  • 单机非关系型数据库
  • 分布式数据库
  • 单机存储产品
  • 单机文件系统
  • 单机key-value存储
  • 分布式存储产品
  • HDFS
  • Ceph
  • 单机数据库产品
  • 关系型数据库 —— PG、MySQL
  • 非关系型数据库 —— ES、MongoDB、Redis
  • Elasticsearch使用案例
  • 分布式数据库产品
  • 问题与挑战
  • 解决方案

使用 Go 协程

最初我们采用了一个非常简单的 POST 处理程序实现,只是试图将job 处理程序并行化到一个简单的 goroutine 中:

func payloadHandler(w http.ResponseWriter, r *http.Request) {

	if r.Method != "POST" {
		w.WriteHeader(http.StatusMethodNotAllowed)
		return
	}

	// 将body读入字符串进行json解码
	var content = &PayloadCollection{}
	err := json.NewDecoder(io.LimitReader(r.Body, MaxLength)).Decode(&content)
	if err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		return
	}
	
	// 分别检查每个有效负载和队列项目以发布到 S3
	for _, payload := range content.Payloads {
		go payload.UploadToS3()   // <----- 这是不建议的做法。这里是最开始的做法。
	}

	w.WriteHeader(http.StatusOK)
}



举报

相关推荐

0 条评论