Home

总结STL的通用算法基本形式

stl的通用算法基本有如下四种形式: alg(beg, end, params):使用源输入作为输出 alg(beg, end, dest, params) :使用dest作为输出,需要保证有足够的空间,所以往往使用inserter alg(beg, end, beg2, other params):beg2作为输出,假定beg2开始的范围至少跟beg和end指定的范围一样大。 alg(beg, end, beg2, end2, params):beg2 end2作为输出 举例: 第一种比如: find(beg, end, search_value); sort(beg, end); accumulate(beg, end, original_value...

Read more

c/c++ 文件/流读取函数总结

针对文本文件的, c++主要有如下几种吧 getline: 实现上,输入istream流,需要支持特定traits的迭代器。从流里面每次一行读入string,遇到delim结束。 template<typename _CharT, typename _Traits, typename _Alloc> basic_istream<_CharT,_Traits>& getline(basic_istream<_CharT, _Traits>& __is, basic_string<_CharT, _Traits, _Alloc>& __str, ...

Read more

记工作中遇到的一个性能问题

工作中遇到一个问题,更新schema的过程发现耗时太长,30多s。导致其他一系列流程阻住。记录一下这个问题的分析解决。 开始觉得估计是数据量大sql执行时间过长,整个过程分为3条sql,也就是schema被分表成为的三个表的查询: select * from __all_table; //主键table_id select * from __all_column; //主键table_id,column_id select * from __all_join;//主键left_table_id, let_column_id 之后在内存里面做Join。由于是有序的,所以join过程直接采用了二分查找。之于没有用散列做Join或者直接 SQL语句里做...

Read more

分布式选主-笔记

数据库主备复制 同步模式 备机是否写盘之后应答 性能收主备机之间通讯距离,网络抖动影响 异步模式 主机不等待备机的应答 性能最优,可能造成数据丢失不一致 半异步 超过多数成功则返回 奇数台机器才可以 3/5 > 2/3 > 2/2

Read more

oceanbase事务引擎-笔记

外存数据库的特点 每次写入需要读取一个完整单元,不同的块做不同的修改,再写回硬盘 oceanbase的特点 本质上差不多,但是快大小不一样,但是增量数据(修改点)集中存储。可以更好的利用内存,利用低峰期合并到内存。但是每次需要读取静态数据和修改。 相对来讲,优化了写入,牺牲了部分读取(完全命中bloomfilter的可以不读静态,相当于内存数据库,不存在动态数据的查询相当于传统数据库)。

Read more

记一个实际中遇到的覆盖问题

工作中遇到一个继承结构如下: ObServerSchemaService : init_core_schema(const ObSchemaManagerV2 &schema) | ObRootSchemaSerivice : init_core_schema() 基类的init_core_schema接收一个核心表的schema,而这个schema往往是从rootserver传过来的,所以下面的子类RootSchemaService不需要传参,直接自己生成就好了。 问题是如果在ObRootSchemaService的对象上想要调用ObServerSchemaService的init_core_schema函数会报错。因为命名空间上Root的会覆盖Se...

Read more

Oceanbase简介 - 笔记

数据库简介 数据库的特点 原子性 : 一笔账,要么转了,要么没转 一致性 : 出账入账必须一致 隔离性 : 多人转账不得相互影响 持久性 : 转账一旦发生,持久存在 还有两个: 高可用 高性能 数据库 vs 计算机 服务器:处理器,内存,磁盘,网卡 原子性:计算机只能保证寄存器的原子 一致性:单个服务器上数据一致性比较好做 隔离性:多个事务串行处理隔离性不好做 持久性:磁盘或者固态盘才有持久性 高可用:磁盘年均故障率1%-3%,单个磁盘可用率99%-99.9% 高性能:服务器性能

Read more

常见的防御性编程策略

针对出错之后不能恢复的情况,最好的办法是写另外一个对象,确认成功之后原子的交换对象。同时也能避免对一个对象的修改持锁时间过长。这种思路广泛用在很多地方。 保存备份文件,当前的文件有可能有人在读在写,所以每次线程都写一个单独的备份文件,最后原子的覆盖之前的文件。 升级系统。自动升级的时候下载了新的可执行文件,然后删除原来的文件,替换成下载文件。当然估计不会有人直接覆盖之前的文件。 一些NOSQL的冻结。OB里面比较典型的就是UpdateServer的内存冻结,当然是copy on write实现的,最后原子的切换B树的根指针。主要是为了minor fqreeze的时候依然能提供写入服务。 =运算符重载的时候,如果当前类持有的对象先释放了,但是又没能成功复制需要拷贝的对...

Read more