• Innodb存储引擎中锁的简析

    mariadb

    基本概念

    innodb是MySQL/MariaDB的默认存储引擎,也是最广泛使用的存储引擎。几年前研究MySQL实现的时候,也看过一本关于innodb的书,但是理解并不到位。最近计划补充一下存储方面的知识,这里就从innodb入手研究一下。对于一个五级数据库引擎(实现事务功能),锁的设计是非常重要的,这篇博客的主题也就是学习innodb中锁。

    innodb中有不少锁,这篇blog主要研究一下几个点,前两点是锁的模式,后两个知识点是锁的类型。这里我想强调一下,锁的模式和锁的类型是两个概念,千万不要搞混了。很多资料上,包括MySQL的官方文档上,都把这些知识点混在一起,给我带来了不少困惑。

    • Shared and Exclusive Locks:共享锁和互斥锁
    • Intention Locks:意向锁

    两种类型的锁:

    • Record Locks
    • Gap Locks

    1. Shared and Exclusive
    【查看更多】
  • 初步学习分布式数据库

    写本文的初衷是由于最近在看《大规模分布式存储系统》,期间有不少疑问以及一些新的认识。这里就准备把自己的疑问和认识记录一下,供以后回炉知识点。这里行文的逻辑大致是以不同的数据库产品或者技术展开,可能会显得比较乱。而且,就目前来说,我对各种分布式数据库的理解都还很肤浅,本文权当自娱自乐了,摘抄很多。

    1. Hbase/BigTable

    作者在书中把Hbase定义为分布式表格系统,其实也没有什么毛病。Hbase的事务支持相当有限,只支持行级事务。Hbase的系统架构图如下:

    Hbase

    Client:包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息

    Master:为Region server分配region,负责Region server的负载均衡,发现失效的Region server并重新分配其上的region,管理用户对table的增删改查操作… 【查看更多】

  • Spring Session加Redis

    本文出自:【InTheWorld的博客】

    redis-spring-boot

    session是一个非常常见的概念。session的作用是为了辅助http协议,因为http是本身是一个无状态协议。为了记录用户的状态,session机制就应运而生了。同时session也是一个非常老的概念了,使用session的方法也是多种多样。就Java来说,servlet的标准本身是包含session的,Tomcat会把session的信息存储在服务器内存里,Request提供了获取session的方法。

    然而,前文所述的session机制其实是有不少缺点的。首先就是session数据没有一定的持久化机制,而且难以实现应用服务器的水平扩展。在负载均衡器 + 应用服务器集群的架构中,session共享是一个基本的要求。在Spring生态圈里,也有Spring session完成session存储和共享的功能。Spring Session支持把session信息以各种形式存储,比如数据库或者Redis。个人认为,Redis比RDBMS更加适合session数据的存储。首先,session数据都… 【查看更多】

  • MySQL服务器连接过程分析

    本文出自:【InTheWorld的博客】

           mysqld是MySQL服务器端主进程,可以说mysqld是MySQL的真正核心,一切工作都是围绕mysqld进程进行的。所以要解剖mysql这个庞然大物,mysqld的代码是最好的突破口。
           一切都是从熟悉的main()函数开始的,其实是从mysqld_main()函数开始的。这些代码都在mysqld.cc。mysqld_main()随后调用了win_main)()。win_main()函数主要是做了一些初始化的工作。
           初始化工作完成之后,MySQL已经做好准备接受连接了。然后我们的主角Handle_connections_methods()函数登场了。这个函数的主要工作是新建3个子进程,他… 【查看更多】

  • MySQL中innodb引擎分析之初始化

    本文出自:【InTheWorld的博客】

    • MySQL的存储引擎是以插件形式工作的,这应该是MySQL的一大特色了吧!根据《深入理解MySQL》的内容,5.1版本时存储引擎的插件化都还不是彻底,确切的说是刚添加的特性。为MySQL添加一个存储引擎时,需要更改一些上层代码,零散的更改本来就有点麻烦,同时工程也要重新编译一次。我听别人说,已经可以不改C/C++代码就直接添加引擎了。这样的话,折腾存储引擎的话就更方便了!
    • 这段代码来自ha_innodb.cc,这是MySQL中申明存储引擎插件的标准过程。这段代码利用了宏。在plugin.h中有比较完整的定义。
    mysql_declare_plugin(innobase)
    {
      MYSQL_STORAGE_ENGINE_PLUGIN,
      &innobase_storage_engine,
      innobase_hton_name,
      plugin_author,
    【查看更多】