借钱不还能立案吗?小盛律师教你怎么对付“老赖”

0 Comment

引言:“借钱是情分,还钱是本分,赖账是过分!若遇‘影帝级’老赖,别陪他演独角戏——法官的锤子,专治各种不服。”

愿你的善良长出牙齿,柔软披上铠甲。
若江湖太深,记得法律这座灯塔,永远为你亮着。

朋友借钱不还,微信拉黑、电话不接,到底能不能报警或起诉?立案需要满足哪些条件?今天,我们结合最新法律法规,从民事立案到刑事追责,一文解答所有疑问!

阅读全文

LevelDB 源码阅读:写入键值的工程实现和优化细节

0 Comment

读、写键值是 KV 数据库中最重要的两个操作,LevelDB 中提供了一个 Put 接口,用于写入键值对。使用方法很简单:

1
2
leveldb::Status status = leveldb::DB::Open(options, "./db", &db);
status = db->Put(leveldb::WriteOptions(), key, value);

LevelDB 最大的优点就是写入速度也非常快,可以支持很高的并发随机写。官方给过一个写入压力测试结果

1
2
3
4
fillseq      :       1.765 micros/op;   62.7 MB/s
fillsync : 268.409 micros/op; 0.4 MB/s (10000 ops)
fillrandom : 2.460 micros/op; 45.0 MB/s
overwrite : 2.380 micros/op; 46.5 MB/s

可以看到这里不强制要求刷磁盘的话,随机写入的速度达到 45.0 MB/s,每秒支持写入 40 万次。如果强制要求刷磁盘,写入速度会下降不少,也能够到 0.4 MB/s, 每秒支持写入 3700 次左右。

这里 Put 接口具体做了什么?数据的写入又是如何进行的?LevelDB 又有哪些优化?本文一起来看看。开始之前,先看一个大致的流程图:

LevelDB 写入整体流程图LevelDB 写入整体流程图

阅读全文

LevelDB 源码阅读:如何优雅地合并写入和删除操作

0 Comment

LevelDB 支持写入单个键值对和批量写入多个键值对,这两种操作的处理流程本质上是相同的,都会被封装进一个 WriteBatch 对象中,这样就可以提高写操作的效率。

在 LevelDB 中,WriteBatch 是通过一个简单的数据结构实现的,其中包含了一系列的写入操作。这些操作被序列化(转换为字节流)并存储在内部的一个字符串中。每个操作都包括操作类型(如插入或删除),键和值(对于插入操作)。

当 WriteBatch 被提交给数据库时,其内容被解析并应用到 WAL 日志和 memtable 中。不管 WriteBatch 中包含多少操作,它们都将作为一个整体进行处理和日志记录。

阅读全文