自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 收藏
  • 关注

原创 日志收集平台

2019-03-16 14:16:52 1170

原创 数据库中间件影子库设计

2019-03-16 14:15:53 4908

原创 sharding-jdbc api结构

1、内部api关系2、初始化流程a、配置Configuration对象。 b、通过Factory对象将Configuration对象转化为Rule对象。 c、通过Factory对象将Rule对象与DataSource对象装配。 d、Sharding-JDBC使用DataSource对象进行分库。...

2019-03-16 14:07:29 418

原创 ServerSocketChannel 写入数据

public class Test { public static void main(String[] args) { try { ServerSocketChannel serverChannel = ServerSocketChannel.open(); serverChannel.socket().bind(ne

2016-12-14 18:43:57 2049

原创 多线程处理信号量

include include include define BOUNDARY 5int tasks = 10; pthread_mutex_t tasks_mutex; pthread_cond_t tasks_cond;static void *say_hello2(void *args) { pthread_t pid = pthread_self(); cout <<

2016-05-13 15:54:44 293

原创 多线程处理

include include define NUM_THREADS 5int sum = 0; pthread_mutex_t sum_mutex;static void *say_hello(void *args) { cout << “hello in thread ” << ((int )args) << endl; pthread_mutex_lock(&sum_mut

2016-05-13 15:52:31 299

转载 patch应用

1.git diff生成的标准patch 我们可以首先用git diff制作一个patch。本文示例的工作目录里最初有一个文件a,内容是“This is the file a.”,放置在master分支中。为了修改代码,我们一般的做法是建立一个新分支:sweetdum@sweetdum-ASUS:~/GitExgitbranchFixsweetdum@sweetdum−ASUS: /GitEx g

2016-05-04 16:48:54 866

原创 const学习

在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针。可以改变this所指向的值,但不能改变 this所保存的地址。 在 const成员函数中,this的类型是一个指向 const类类型对象的 const指针。既不能改变 this所指向的对象,也不能改变 this所保存的地址。关键字:Const,Const函数,Const变量,函数后面的Const看到const关键字

2016-04-28 22:00:02 227

原创 make

Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。本文我们将用一些实例来讨论 make 命令背后的工作机制。Make 如何工作的: 对于不知道背后机理的人来说,make 命令像命令行参数一样接收目标。这些目标通常存放在以 “Makefile” 来命名的特殊文件中,同时文件也包含与目标相

2016-04-27 16:20:12 249

原创 gdb调试

gdb是一个在UNIX环境下的命令行调试工具。  如果需要使用gdb调试程序,请在gcc时加上-g选项。  下面的命令部分是简化版,比如使用l代替list等等。1.基本命令1)进入GDB  #gdb test  test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。2)查看源码  (gdb) l  源码会进行行号提示。  如果需要查看在其他文件中定义

2016-04-27 15:44:40 2556

原创 ctags

Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量名,函数名等。比如,tags文件就是Taglist和OmniCppComplete工作的基础。『下载和安装』 一、我是使用apt-get安装的: sudo apt-get install ctags 二、下载源码安装(网上提供的方法)

2016-04-27 14:21:48 249

原创 常用命令(一)

export: 语  法:export [-fnp][变量名称]=[变量设置值] export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。参  数:  -f  代表[变量名称]中为函数名称。  -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。  -p  列出所有的shell赋予程序的环境变量。 一个变量创建时,它不

2016-04-25 15:48:43 309

原创 常用命令

export ctags make patch g++ git 【clone, pull, push, rebase, fetch, merge, origin, master 概念] vim gdb make lddfind grep sed less more tailf tail echosudo pwd cd clear ls sh ssh ma

2016-04-25 15:12:15 234

转载 TCP/IP、Http、Socket的区别

网络由下往上分为  物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。  通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,  三者从本质上来说没有可比性,  socket则是对TCP/IP协议的封装和应用(程序员层面上)。  也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,  而HTTP是应用层协议,主要解决如何包装数据

2016-04-22 21:36:33 194

转载 rpc调用

同步调用 客户方等待调用执行完成并返回结果。 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。客户方像调用本地方法一样去调用远程接口方

2016-04-22 21:28:36 409

转载 状态机2

状态机就是一种存在于理论中的机器,它具有以下的特点:它有记忆的能力,能够记住自己当前的状态。它可以接收输入,根据输入的内容和自己的状态,修改自己的状态,并且可以得到输出。当它进入某个特殊的状态(停机状态)的时候,它不再接收输入,停止工作。理论说起来很抽象,但实际上是很好理解的。首先,从本质上讲,我们现在的电脑就是典型的状态机。可以对照理解:电脑的存储器(内存、硬盘等等),可以记住电脑自己当

2016-04-22 21:08:23 279

原创 blob 存储大小

MySQL的四种BLOB类型 类型 大小(单位:字节) TinyBlob 最大 255B Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

2016-04-22 20:59:35 4240

原创 状态机

比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。同样,一个串行通信的时序(不管它是遵循何种协议,标准串口

2016-04-11 20:25:39 294

原创 mysql: float、double实现结果方式

float(m,d): 数值范围: -3.402823466E+38 to -1.175494351E-38, 0, 和 1.175494351E-38 to 3.402823466E+38。 这个是理论值,实际的值根据操作系统的硬件影响可能会稍微小点。 m代码数值长度,d代表精度,当m和d没有写的时候,值根据硬件大小来决定。 可精确到7位小数。 mysql中float类型的计算都是用d

2016-04-11 16:32:09 3657

原创 mysql 中decimal数据结构

typedef int32 decimal_digit_t;/** intg is the number of decimal digits (NOT number of decimal_digit_t’s !) before the point frac is the number of decimal digits after the point

2016-04-08 14:12:30 845

转载 oceanbase每日合并

oceanbase本质上是基于lsm-tree的方式实现每日合并的,简单来说就是将数据的更改hold内存中,当达到指定的阈值后,再批量写到磁盘与已有的数据做合并。这个设计基于的假设是:写入远远大于读取,insert量大,update量小,这种方法可以优化写,但没有显著降低读,因为大部分最新的数据都在内存里面,读取速度会非常快。1、基础架构 1.0之前的oceanbase架构,都是分为4个serve

2016-04-07 21:40:44 1330 1

原创 lsm-tree

lsm思想非常朴素,就是将对数据的更改hold在内存中,达到指定的threadhold后将该批更改批量写入到磁盘,在批量写入的过程中跟已经存在的数据做rollling merge。拿update举个例子: 比如有1000万行数据,现在希望update table.a set addr=’new add’ where pk = ‘833’,如果使用B-Tree类似的结构操作,就需要:1、找到该条

2016-04-07 20:50:42 583

转载 innodb double write原理在ocean base中应用

innodb double write原理 基本原理是将数据写两份 将Dirty page刷到磁盘时,先将page刷到磁盘上的一个区域tablespace,然后择机将page拷贝到数据文件对应的位置。 tablespace是innodb在磁盘上分配的一块区域,包含100个page。 每个page都有自己的checksum,来校验本身数据的正确性。用double write的原因: 为了处理

2016-04-07 20:22:42 567

转载 oceanbase 与hbase主要区别

oceanbase支持跨表的事务,而hbase中支持跨行的事务,这是由他们的设计特别决定的。updateserver实际上是将Hbase所有ReginonServer的memtable聚合在一起。 regionserver只服务一部分table的更新(当然也有查询服务),所以只能够提供行级别更新的事务。而UpdateServer是服务所有的tablet的更新,所以可以提供跨行跨表的事务,所以Upd

2016-04-07 19:28:57 4502

转载 ob中内置join的意义

这个在0.5中应用,为了解决收藏夹的问题,1.0后就没有用了。 oceanbase中内置join的目的是为了空间换时间,因为在数据库中,两张表之间的join是非常耗时的,做法是在一张表中,冗余另一张表的几列,查询的时候,只需要查询一张表就行了。以收藏夹为例,收藏夹主要有两张表,info(收藏表,存储了收藏时间,收藏者等信息),item(商品表,存储产品名称,价格等信息)当用户查看自己的收藏记录时,

2016-04-07 19:24:32 324

原创 .ipp文件是做什么的

.ipp 文件为什么不写成 .h 或者 .cpp文件借鉴了C++ boost libray的做法,用于将模板的声明与实现分开,因为模板是在预编译时进行处理的,所以不能放到.cpp文件里面,所以就定义了.ipp文件。 将模板的实现部分放到.ipp文件,然后在模板声明的.h文件后面, #include 这个.ipp文件。

2016-04-07 19:12:16 9787

原创 ob为什么同时存在两种迭代接口的代码

(cell接口、row接口)oceanbase的早期版本类似于一个key-value no sql 系统,所以采用的是cell接口,读写是以cell为基本单位。oceanbase0.4以及后续的版本,才真正可以称作一个数据库,所以cell接口已经不适应当前的设计,所以就采用了row接口,以row为迭代的基本单位。这也是现在在oceanbase代码中有两套接口并存的原因,以后cell接口会逐渐废弃。

2016-04-07 19:06:32 449

原创 可变参数变量模板

可变参数变量其实利用的是循环迭代的设计思想,如下例子所示:public: template

2016-04-07 17:32:17 266

原创 c++中延迟初始化

仅仅在C++0x标准或gnu++ox标准中使用-std=c++0x -std=gnu++0x这两个参数设置上后,才能有延迟初始化,即参数在模板里面初始化

2016-04-06 17:48:18 1607

转载 mysql 数据库引擎

MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL++ API自己做一个引擎。下面介绍几种数据库引擎:ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法

2016-04-06 17:00:11 196

原创 TODO

1、用pthread实现两个线程(两个线程加法,加到100)2、用libmysql写连接mysql数据库的,实现增删改查3、用TCP+socket写一个包在2台机器之间的传送4、RPC请求学习5、为什么用读写锁,还有那些锁6、explain select count(c1) from t1,t2 where c1>5

2016-03-31 11:14:29 178

转载 设计模式--装饰者模式

咖啡:低咖啡因 浓缩 配料:牛奶 摩卡 豆浆有两种主咖啡,可以搭配任意的饮料,我们的目标是允许类容易扩展,在不修改现有代码的情况下,可以搭配新的行为。这里可以用装饰者模式来实现。 装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰者模式的好处: 1、每个组件都可以单独使用,或者被装饰者包装起来使用 2、装饰者可以扩展组件的状态 3、装饰

2016-03-30 21:18:05 166

转载 bloom filter 算法

集合数据结构一般都有这么一个方法:contains。其作用就是判断给定的元素是否存在在集合中,这是一个常用的方法。其最简单的内部实现即遍历集合内的元素,一个个的判断是否与给定元素相等。为了更高效点我们甚至可以采用”更好的(或者相对的)“算法实现。比如如果该集合是已经排序的,那么我们用二分查找来实现contains肯定更好。但是,如果集合的数据量庞大到一定程度,大部分我们熟知的算法不再有什么用了。即使

2016-03-30 20:48:06 298

转载 LevelDb

LevelDb的MemTable提供了将KV数据写入,删除以及读取KV记录的操作接口,但是事实上Memtable并不存在真正的删除操作,删除某个Key的Value在Memtable内是作为插入一条记录实施的,但是会打上一个Key的删除标记,真正的删除操作是Lazy的,会在以后的Compaction过程中去掉这个KV。需要注意的是,LevelDb的Memtable中KV对是根据Key大小有序存储的,在

2016-03-30 19:52:33 216

转载 LevelDb

LevelDb的MemTable提供了将KV数据写入,删除以及读取KV记录的操作接口,但是事实上Memtable并不存在真正的删除操作,删除某个Key的Value在Memtable内是作为插入一条记录实施的,但是会打上一个Key的删除标记,真正的删除操作是Lazy的,会在以后的Compaction过程中去掉这个KV。需要注意的是,LevelDb的Memtable中KV对是根据Key大小有序存储的,在

2016-03-30 19:52:23 191

原创 SSTable and Log Structured Merge Trees

仅仅SSTable数据结构本身仍然无法support高效的range query和random r/m 的场景,还需要一整套的机制来完成从memory sort、flush to disk,compaction以及快速读取。。。这样的一个完成的机制和架构称为“ The Log-Structured Merge-Tree”(LSM Tree)。 首先是基于log的,不断产生SSTable结构的log文

2016-03-30 19:46:39 300

原创 Cassandra--memtable SSTable

memtable是可以使用key来访问的基础的数据回写缓存–并不是flush的时候,将membable完全写入缓存。将memtable写入到sstable的过程叫做flush,当你想减少commitlog的消耗时间时,你可以启动flush。meltable按照key来排序,按照序列化的方式回写。回写是非常快的,消耗仅仅是增加commitlog和分期序列化的写。当flushed时,SSTable文件是

2016-03-30 17:58:56 1552

原创 sstable

sstable种类包含statistic、bloomfilter、index、data。按照 BigTable的定义,SSTable叫做 Sorted String Table.其本质上是一种文件格式用于存储数据到磁盘上。1、Data Data文件用于存储所有ColumnFamily的信息,即其包含的Column Index(注意:列索引没有单独的文件,如果采用B+Tree则需要有单独的文件)

2016-03-30 16:58:45 572

原创 oceanbase中schema_manager

oceanbase中每个observer都有schema_manager这个结构体,包含schema_version标示当前schema的版本号。假设现在有两台observer(obs0和obs1)一台root server(利用锁的原理,将DDL操作串行执行)。client发送DDL请求到obs1,obs1将请求通过PRC发送给root server,root server收到请求后,更新sche

2016-03-30 16:27:07 466

原创 SQL 语句类型以及处理

1、DML 包含select、delete、insert/replace、update2、DDL 包含create、update、delete3、TCL(事务控制语句) 包含start transaction、commit、rollback、end transaction、4、DCL 包含create user、grant、set、alter system m

2016-03-30 15:52:20 251

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除