golang学习笔记(三)

  • mysql支持插件式的存储引擎。
  • myisam和innodb。
  • myisam查询速度快,只支持表锁,不支持事务。
  • innodb整体速度快,支持表锁和行锁,支持事务。
  • 事务的特点:acid:原子性,一致性(事务开始和结束之间的中间状态不会被其他事务看到),隔离性(两个事务是互相隔离的),持久性(事务的操作是不会丢失的)。
  • 隔离性:隔离级别:·Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
      ·Repeatable read (可重复读):可避免脏读、不可重复读的发生(innodb)。MySQL的默认隔离级别就是Repeatable read。
      ·Read committed (读已提交):可避免脏读的发生。
      ·Read uncommitted (读未提交):最低级别,任何情况都无法保证。
  • 索引:b树和b+树。索引的类型。索引的命中。
  • 分库分表。
  • sql注入,sql慢查询优化,msyql主从(binlog),mysql读写分离。
  • go语言并不提供具体的数据库驱动。原生支持连接池,是并发安全的。
  • mysql连接池,不用用到的时候去建立连接,可以提高效率。
  • 必须对rowObj调用scan方法,这样才可以释放连接。
  • sql执行完之后,一定要close。
  • UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
  • DELETE FROM table_name [WHERE Clause]
  • mysql预处理,可以优化重复执行的sql操作
  • 推荐看看jmoiron/sqlx 这个库,是个轻量级的SQL 扩展组件,在大部分的场景下,比起ORM笨重的框架和复杂的学习曲线,我更倾向这个轻量级的SQL库。可以支持转换为结构体。
  • 不同的数据库中,SQL语句使用的占位符语法不尽相同。例如mysql是?。
  • 我们任何时候都不应该自己拼接SQL语句!参数要进行校验。最常见的脱库的手段。用户输入的任何参数都要进行校验(无论前端后端)
sqlInjectDemo("xxx' or 1=1#")
sqlInjectDemo("xxx' union select * from user #")
sqlInjectDemo("xxx' and (select count(*) from user) <10 #")
  • redis的作用:简单队列,排行榜。Memcached中的值只支持简单的字符串,Reids支持更丰富的5中数据结构类型。 Redis的性能比Memcached好很多 Redis支持RDB持久化和AOF持久化。 Redis支持master/slave模式。redis.Z(有序集合)。
  • nsq 分布式消息队列,支持横向扩展,而且内置了管理界面。流量削峰。把同步的操作异步化。nsqd是一个守护进程,它接收、排队并向客户端发送消息。golang学习笔记(三)_第1张图片
  • nsq三种角色:
    • nsqd
    • nsqlookupd
    • nsqadmin
  • nsq消息不保证有序。
  • go module 依赖管理,默认的版本管理工具。有了go module,没必要再从gopath下写代码了。Go modules 是 Go 语言中正式官宣的项目依赖管理工具。Go moudles 目前集成在 Go 的工具链中,只要安装了 Go,自然而然也就可以使用 Go moudles 了。 Go modules 的解决的问题之一就是“淘汰”掉 GOPATH。
  • go 1.7加入了context。
  • kafka:每个partition都是有序的。zookeeper:是一个针对大型应用提供高可用的数据管理、应用程序协调服务的分布式服务框架。

你可能感兴趣的:(golang)