02 2016 档案
摘要:问题描述 我们的项目中, 产品需要增加接口 query/add/update/delete, 在其中访问/修改 sqlite数据库中的一个表和 一个 文件. 表里的数据和文件的数据 是 一条一条对应相关的, 需要保持一致, 否则系统会无法使用. 而且同一个数据库/文件 会被多线程/多进程访问. 从最
阅读全文
摘要:从问题开始说. 我们产品的 操作台(workbench) 是一个java swing程序. 有一个event handler的代码如下: public void actionPerformed(ActionEvent e) { // 做耗时的工作, 如插入数据库 } 现在的一个问题在于, 如果用户连
阅读全文
摘要:原文链接: http://www.cnblogs.com/promise6522/archive/2012/05/27/2520028.html 写的很棒也很详细. 摘要: fsync需要sync文件修改和 metadata; fdatasync则只在必要的时候才sync metadata, 可以节
阅读全文
摘要:想了解 berkeley db的底层实现, Margo Seltzer 和 Keith Bostic的这篇文章是必须要看的: http://www.aosabook.org/en/bdb.html 一直想翻译过来, 不过太懒了. 今天在网上看到已经有人做过翻译的工作了, 链接: http://www
阅读全文
摘要:berkeley db的组提交机制 见 src/log/log_put.c, __log_flush_int(). 一个 事务 是否已经提交, 关键看其在log里是否有 commit log 记录, 并且此log记录已经sync到磁盘上了. 所以transaction commit, flush l
阅读全文
摘要:BDB中 内存池是用一个 hash table来管理 buffers. 这个hash table的大小首先是和 内存池的大小成正比. 其次, bdb code会经常遍历hash chain, 它的长度 不能太大. 计算公式为: cache 大小/region数目 = 每个region的大小 buck
阅读全文
摘要:一个典型的 buddy system. 代码在env/env_alloc.c 数据结构: ALLOC_LAYOUT: 管理整块内存(即bdb的某个region)的 数据结构. 放于此内存 开头位置. SH_TAILQ_HEAD(__addrq) addrq; // address queue. 按地
阅读全文
摘要:下面的代码保证了BDB 的write ahead logging机制. 在写database page之前, 确保此page buffer对应的log lsn已经 sync到 disk上. //src/mp/mp_bh.c, __memp_pgwrite() /* * If the page is
阅读全文
摘要:我们产品的code 用了sqlite的源码: // lang/sql/sqlite/src/hash.h, lang/sql/sqlite/src/hash.c: struct HashElem { ... const char *pKey; void *sqlite3HashInsert(Hash
阅读全文
摘要:class Engine { Engine(...) throws Exception { // do some locking // do other things that could throw exception } void close() { // do unlocking } } pu
阅读全文
摘要:修复一个产品bug, 最终定位是memcpy使用的问题. 下面的示例代码: #define N 16 int main() { int arr[N], i; for (i = 0; i < N; i++) arr[i] = i; printf("before memcpy:\n"); prt(arr
阅读全文

浙公网安备 33010602011771号