- 博客(52)
- 资源 (29)
- 收藏
- 关注
原创 What‘s new in PikiwiDB(Pika) v3.5.3(正式版)
随着 Redis 宣布采用双协议以维护其商业利益,PikiwiDB(Pika) 社区非常荣幸地宣布之际,我们的最新 v3.5.3 正式生产可用版本现已发布。v3.5.3 版本不仅修复了长期存在的 Bug,还引入了一系列新特性。这些新特性包括 Pika 对 ACL 的支持、移除了 Sharing 模式的残留 Slot 代码、命令执行的快慢分离、Redis Stream 支持、大 key 分析工具、以及 Pika 分布式集群的全自动化 failover 等。
2024-03-28 14:12:27
1937
原创 What‘s new in PikiwiDB (Pika) v3.5.3 (正式版)
随着 Redis 宣布采用双协议以维护其商业利益,PikiwiDB (Pika) 社区非常荣幸地宣布之际,我们的最新 v3.5.3 正式生产可用版本现已发布。
2024-03-27 20:51:13
851
原创 Farewell to Pika, Embracing the Arrival of PikiwiDB in 2024
磁盘型 Redis 项目鼻祖 Pika 改名 PikiwiDB 了
2024-01-02 14:46:16
1212
原创 What‘s new in Pika v3.5.2
Pika 社区近期发布了备受期待的 v3.5.2 版本,不仅解决了历史遗留的 Bug 问题,还引入了多项新特性。这些新特性主要包括 Pika 支持 Redis 事务、Pika 上层增加缓存层实现冷热数据分离、提升读性能、Codis-Proxy 支持动态修改配置参数等等,无疑将会让用户感受到更为高效和稳定的使用体验。
2023-12-04 16:55:30
259
原创 What‘s new in Arana v0.2.0
经过两年发展一年建设,Arana v0.2 支持了全新的可视化的 admin dashboard,对数据库表的 sharding 能力进一步增强,支持更丰富的 DDL 语句,并支持影子表特性,方便进行数据库压测工作。
2023-10-21 15:07:08
269
原创 使用C++11改造muduo
上周拿到了订购的《Linux多线程服务端编程:使用muduo C++网络库》一书,花费一天时间浏览了一遍,并细读了其中感兴趣的一些章节。阅毕,决定用C++11改造其相应源码muduo。 muduo依赖boost这个庞大的库,而且还使用cmake才能进行编译,我当时的目标也就只有两个:1 删除muduo代码中boost相关的代码;2 自己添加makefile编译文件,去除与cmak
2015-05-20 13:29:14
13127
4
原创 protobuf v3测试
谷歌最近发布了v3版本的protobuf,以前的protobuf被称之为v2,二者之间的区别其特点见我上一篇blog《protobuf一些注意事项》。 个人以为v3要比v2好处就在于:简洁,且二者的新版本都共同支持了新的数据类型:map。相比v2,它去掉了required等选项,只保留了repeated选项,还添加了时间等比较常用的数据类型(当然暂时还没有实现)等等。唯一的缺点就是,v3
2015-02-07 16:54:55
18266
原创 protobuf一些注意事项
读完protobuf一些文档,写点东西,权作记忆。https://github.com/google/protobuf/blob/master/CHANGES.txt:google发布了protobuf v3,为了pb更好用,更跨语言,他对protobuf v2做了以下change: 1. Removal of field presence logic for p
2015-02-07 13:46:31
74359
1
原创 golang中method的传值与传地址
golang中,struct的method的形式如下: func (r ReceiverType) funcName(parameters) (results) 如果想要修改struct的成员的值,method被定义时候其ReceiverType必须是struct*形式。如果ReceiverType是struct,则无法改变struct成员的值。 废话少说,代码验证:
2015-01-23 15:16:10
5742
原创 golang中的use-a和has-a
type Person struct { Name string Address Address}type Address struct { Number string Street string City string State string Zip string}func (p *Person) Talk(
2015-01-23 14:35:16
1601
原创 分布式散记
对分布式系统有一些粗浅理解,记录下一些要点,以备记忆。 1 EC纠删码 & Reed-Solomon 算法 分布式存储要讲究效益。正常情况下系统对一个数据会通过备份数据以保证数据安全,例如把数据存储为两份或者三份,这个方法的优点是简单,CPU没有计算量,但是存储成本高。 一些公司未来节约成本会使用EC纠删码算法,如七牛公司,其具体的算法我不清楚,其大
2015-01-20 21:16:52
1299
原创 golang中MD5值计算问题
朋友发来一个一段用golang写的计算MD5值的codes:package mainimport ( "crypto/md5" "fmt")func main() { hash := md5.New() b := []byte("test") hash.Write(b) fmt.Printf("%x %x\n", hash.Sum(nil), md5.Sum(b))}
2015-01-15 16:15:07
5776
原创 七牛的存储算法猜测
个人浏览网页的时候,有打标签的习惯。最近整理以往的标签的时候,发现积累了一些有关七牛公司存储方案的网页,遂决定整理一篇文章处理,以备记忆。当然,也希望对他人有用。引言:何为纠删码数据的爆炸式增长使得存储系统的规模不断增加,存储设备的可靠性却一直没有得到显著提高(SSD 从SLC 到MLC 和TLC 可靠性不断下降,磁盘随着单位面积写入数据更多导致可靠性无法提升),从而给数据的持
2014-12-13 20:48:09
4553
原创 关于gc
目前成熟的工业语言java和c#都有非常成熟的垃圾回收机制。 另外一个成熟的oop语言c++和c发展到目前都没有gc机制,以前非常不解。只到最近看了go语言,才粗略地明白一些原因 。 go语言有自己的gc机制,也有指针技术,但是go语言中不允许对指针进行加减法等数学运算,即一个指针只能指向某个地址,类似于C中的type * const ptr类型的固定地址指针。 而在
2014-12-02 13:47:05
1933
原创 多线程下写日志
鄙人最近遇到了一个奇特的线上事故,记录一下,以备记忆。 鄙人所在的部门负责给公司提供各种基础库,即基础架构部门。最近某别的部门用本部门提供的支持多线程版本的日志库后,出现这样一个奇特的现象:当磁盘被日志写满以后,他们的数据文件的头部被写上了最新的日志!就是说,别的部门的程序的数据文件被日志数据给污染了。 这里先不介绍这个事故的原因。先说下这个日志库的写日志过程,
2014-10-31 17:00:21
13747
1
原创 docker粗浅理解
容器这个概念确实好。如果是用虚拟机,一上来他们就把资源吃完了,没有弹性。而容器创建的时候只分配了很少的资源,一旦需要更多的资源,再向os要这个确实好。stocks(362110134) 11:20:11 容器的创建和销毁几乎没有啥成本。stocks(362110134) 11:21:20 打个不恰当的比方,就类似于进程的.bss空间,说是逻辑空间需要那么多,但是物理内存并不存在
2014-10-13 11:49:25
1197
原创 多个线程如何操作同一个epoll fd
自己以前做一个接口服务器时候,这种场景下我的设计是多个线程操作同一个epoll fd。彼时,我的理由是epoll的系列函数是线程安全的。 当然有人不理解为什么会有多个线程操作同一个epoll fd的情形,这里稍微铺陈一下接口服务器的场景。epoll fd有线程1维护,监听服务端端口的socket的accept出来的acceptor(即新的socket fd)也放在这个epoll
2014-08-31 13:20:17
13016
原创 如何快速的把日志输出到磁盘上
不管是做客户端业务,还是做服务端业务,日志子系统都是非常重要的一个组件。 日志系统的输出目的地可以是disk,也可以是tty,更可以是network。 我的日志系统可以输出到tty,不同log level可以有不同的color,这样看日志非常的醒目,当然这里着重谈的是如何快速的把log内容写到磁盘上。 其实,如何快速的把log内容写到磁盘上,网上文章已经汗
2014-08-09 21:57:51
2498
转载 Cap'n Proto, FlatBuffers, and SBE
Yesterday, some engineers at Google released FlatBuffers, a new serialization protocol and library with similar design principles to Cap’n Proto. Also, a few months back, Real Logic released Simple
2014-06-25 15:02:29
5625
原创 FlatBuffers与protobuf性能比较
FlatBuffers发布时,顺便也公布了它的性能数据,具体数据请见Benchmark。 它的测试用例由以下数据构成"a set of about 10 objects containing an array, 4 strings, and a large variety of int/float scalar values of all sizes, meant to be rep
2014-06-25 08:35:43
51656
原创 定制一个FlatBuffers编译器
个人并不喜欢FlatBuffers编译器生成的代码,原因是我已经习惯了unix风格的代码。 不喜欢之处大致有以下: 1 命名法使用了Pascal命名法,而我个人习惯了小写字母加下划线式的unix式命名法; 2 Create类的函数参数列表的所有参数都堆在一行,非常惨不忍睹,我自己习惯于每行一个参数式的风格; 3 生成的头文件连个预防文件被重复
2014-06-25 07:52:12
3735
原创 FlatBuffers要点
FlatBuffers发布出来一周多,周末便抽时间先研究下它的使用方法。Flatbuffers的idl的语法主要参考[http://google.github.io/flatbuffers/md__schemas.html ]。本文主要介绍几个它的monster.fbs没有给出说明的几个语法点和相关的注意事项。1 comment它的注释中介绍了”///",说明是可以生成do
2014-06-21 18:29:29
8831
原创 在C语言环境下使用google protobuf
本文写给经常使用C编程且不喜欢C++而又要经常使用google protobuf的人。经常写通讯程序的人对数据进行序列化或者反序列化时,可能进程使用google的protobuf(PB),其优点多多,不用我在这里赘述。PB可以跨语言使用,唯独缺了C语言。礼失求诸野,我在网上找到了一个非官方的protobuf-c,其官方网址是http://code.google.com/p/protobuf
2013-11-14 02:32:20
16743
原创 使用vim分割窗口时如何改变窗口的尺寸
使用vim编程时候,不可避免的要分割屏幕。 如果要水平的平分屏幕,可以使用”:split“命令,如果要改变屏幕尺寸,可以用ctrl + w + +\- 来改变屏幕尺寸,这个操作方式等同于命令” :+ "或者” :- ",如果一次要增加3个char或者减少3个char,则命令是” :+ 3"或” :-3",其实这两个命令也不是真正的命令,仅仅是替代了操作方式而已,下面会给出真正
2013-10-22 17:56:15
31207
2
原创 关于调用函数gettid的错误提示
在OpenSuse 64 v12.3上调用gettid函数(已经加上头文件sys/types.h),但是gcc -Werror给出如下错误提示: error: implicit declaration of function 'gettid' [-Werror=implicit-function-declaration] 而man 2 gettid结果如下: N
2013-06-08 10:51:34
10805
原创 C语言关键字const再理解
以往对C语言关键字const的理解是一个const类型的常量指针被赋值为某一块内存区域的首地址时,这块内存区域中的数据不可修改。 如代码const char* string = “abcdefg",此时常量指针string指向一块内存区域,其中数据为"abcdefg",其中的数据不可修改。 但是若遇到以下代码: char
2013-05-03 20:08:56
1333
原创 多级hash
我在以前的博客《sdk的windows版本》点击打开链接 中稍微的介绍了一些多级hash的信息,现在尽自己所知详尽地予以介绍。现在的服务器网络数据收发与存储没有不做缓存的,不做缓存不能发挥机器的高性能。一般地,公司内部都有集中固定型号的服务器,每种都有其性能极限,一般包括但不限于CPU计算能力、网卡收发包能力、内存容量以及磁盘容量和他的读写速度。多级hash即与内存容量有关。假设一台del
2013-04-26 22:33:15
4937
原创 sdk的windows版本
之所以叫作sdk的windows版本,是因为我有一个linux版本的linux版本。windows版本的sdk有以下数据结构:1 可伸缩性hashtable2 由红黑树实现的map3 多级hash(tencent非常常用的一种数据结构),可以参考一下文章:http://ahfuzhang.blogspot.com/2012/09/hash.html《多阶hash表 》h
2013-02-27 12:14:50
3955
原创 C语言运算时的参数符号自动转换
一个简单的问题?C语言中int和unsigned int二者谁的数值范围大?提示一下,数值0在int中有+0和-0之分,unsigned int中0只有一个+0,所以unsigned int的数值范围比int大。有C语言运算代码如下:#include int main(int argc, char** argv) { int val = -15; un
2013-01-30 09:13:58
1187
原创 C程序中函数名与宏名称同名
C语言中,函数名称和宏名称可以相同。可以参考下面的示例程序。///////////////////////////////////////////test.cpp#include void print(int value) { printf("%d\n", value);}#define print(x) printf("hello"
2012-12-25 17:34:19
9719
原创 计算今天的凌晨时间
鄙人在SuSE linux 64位服务器编程,今天有一个功能跟客户端同事联调,其中一步骤是关于今天的凌晨时间的判断,两边一直差异较大。与他沟通之后,才知道是凌晨时间计算方法的差异。客户端(windows)的同事的计算方法如下:time_t cur_time = time(NULL);time_t morning = cur_time - cur_time % 86400;//864
2012-12-05 13:18:26
2092
原创 显示dos命令ping和tracert等输出结果中的ip对应的地域名称
公司老大今天使用了dos命令ping,他想看到其中ip地址对应的地域名称。如dos下命令ping www.qq.com的输出结果是:正在 Ping www.qq.com [113.108.20.50] 具有 32 字节的数据:正在 Ping www.qq.com [113.108.20.50] 具有 32 字节的数据:来自 113.108.20.50 的回复: 字节=32 时间
2012-11-26 21:24:18
2689
原创 select的效率一定比epoll低吗?
一般以为epoll的效率比select高,当然有人知道这个前提是网络环境较差且存在大连接(超过10k)的情况下。网络上>一文中列出了下列因素: select/poll的缺点在于: 1.每次调用时要重复地从用户态读入参数。2.每次调用时要重复地扫描文件描述符。 3.每次在调用开始时,要把当前进程放入各个文件描述符的等待队列。在调用结束后,又把进
2012-10-30 01:03:18
6176
原创 opensuse12.2的gdb不能自动加载.gdbinit的解决方法
个人使用gdb调试程序的时候,喜欢在当前目录下先写一个.gdbinit,直接运行一个"/home/huang/sdk> gdb"命令,就可以快速调试了。 最新的opensuse12.2的gdb版本是GNU gdb (GDB) SUSE (7.4.50.20120603-2.1.2),安装以往的老习惯,写完.gdbinit文件,来一个gdb命令,回车之后,却给我这样一个提示:war
2012-10-26 13:23:10
6814
1
原创 怎样安全的使用可变参数宏__VA_ARGS__
今天遇到一个关于可变参数的问题,下面先给出一个示例程序说明我遇到的问题。0 #include 1 2 #define print(fmt, ...) out(fmt, __VA_ARGS__)3 #define out(fmt, ...) printf(fmt, __VA_ARGS__)4 5 int main(int argc, char** argv
2012-10-11 20:09:40
5649
原创 关于宏的两个bug
个人用define定义宏的时候,有个习惯,进行宏拓展时候,习惯于把外面传进来的参数加上小括号使用。例如: #definesum(x, y)((x) + (y))如果要定义宏对结构体进行操作,以前也是使用其指针形式进行操作,所以亦无碍。如:#defineget_num(N)((N)->num)但是今天无意,使用了结构体本身,固有的六年多的习惯栽了跟头。有结构体NUM:ty
2012-09-17 19:47:16
1349
protobuf-c测试用例
2013-11-14
protobuf-c
2013-11-14
lisk_v0.2.1
2013-04-23
open bloom filter
2012-11-19
可在ubuntu上安装erlang的deb包
2012-07-05
intersection of parametric surfaces and plane
2011-08-11
嵌入式linux平台下的bootloader
2011-08-11
改变MFC应用程序主窗口的类名
2011-05-26
MFC多线程编程示例
2011-01-09
一个关机和闹钟示例程序
2011-01-07
一个简单的对注册表进行操作的示例
2010-12-26
一个简单的MFC程序
2010-12-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人