2PL 被广泛用于并发控制。在 2PL 中,锁的类型分为两种, X 锁和 S 锁。对某个数据进行操作时,必须获得该数据对应的锁。2PL 将加锁和释放锁的过程分为两个阶段,
(1)加锁阶段:该阶段内只能进行加锁,不能释放任何锁。
(2)释放阶段:该阶段内只能释放锁,不能新加锁。
也就是说,2PL 要求一个事务一旦释放了某个锁,就不能再请求新的锁。
在实际的系统中,除非预先知道事务的整个处理流程,否则很难知道在什么时间点之后,该事务不会再读写数据(也就是不会再请求新的锁),也就是说第一阶段结束的时间点无法确定。所以,通常的做法是,事务完成整个处理流程之后,再进入到释放阶段开始释放锁。
上面说到事务总是在完成的时候才开始释放锁,这就会导致一个问题,对于某些热点数据,在整个事务过程中会只被访问一小会,但是这个热点数据的锁需要到整个事务处理完才能释放,所有需要访问这个数据的其他事务都必须要等待这个事务处理完才能进行下去。
下图对比了在 2PL 中事务的加锁顺序和理想状态下的加锁顺序。
左图(1)展示的是 2PL 的案例,T1,T2,T3这三个事务都想更新热点数据 A。但是在这三个事务中更新 A 的操作只占整个事务处理流程的一小部分。如果 T1 首先获得了 A 的 X 锁,这个时候 T2 和 T3 尝试获取 A 的 X 锁时将会发生冲突,必须进行等待。T1 更新完 A 后继续处理其他数据,最后提交整个事务时才释放 A 的 X 锁。如果此时T2 成功抢占到了 A 的 X 锁,T3 还需要继续等待,直到 T2 提交释放完 A 的 X 锁,T3 才可以开始执行。在这个例子中,更新 A 只是这三个事务中的一个小操作,但是 T2 需要等到 T1 提交完才可以执行,T3 需要等到 T2 提交完才可以继续执行。实际上,这三个事务完全是串行执行的。在非冲突的部分完全没有任何并行性。理论上,为了保证一致性,只要保证冲突数据的顺序执行就可以了,但是由于 2PL 的限制,导致了整个事务级别的串行执行。
上面的右图(2)展示了理想的情况,在理想状态下,T2 只需要等待 T1 更新完 A 之后,就可以继续更新 A,T3 只需要等待 T2 更新完 A 后就可以继续更新 A 了。也就是说,在这种情况下,只有更新 A 的这个操作需要顺序执行,在其他没有冲突的部分,这个三个事务还是可以并发执行的。
这篇论文最主要的目标就是解决热点冲突时锁竞争的问题,实现上面右图中的理想模式。但是,为了实现理想的并发控制模式,面临着 2 个主要的挑战,
(1)理想状态下,T1 在事务提交前就释放了 A 的锁,导致 T2 读到了 T1 未提交的事务,这种情况下如何保证记录之间的依赖关系?
(2)理想状态下,T2 读到 T1 未提交的数据,而 T3 又读到了 T2 未提交的数据,在 T1 发生 abort 时,T2,T3 都需要 abort,如何减少系统中的这种级联 abort?
该论文提出了名为 Bamboo 的算法来解决上述的挑战。在 Bamboo 中引入了新的 Retire()
接口。针对锁的操作分为 Lock()
,Retire()
和 Release()
这三个。 Lock()
和 Release()
维持原有的语义。Retire()
用以在事务提交之前释放锁。如下图中(1)所示,当某个事务更新完某个热点数据后,调用 Retire()
“释放” 该锁,其他事务可以获取该锁。事务结束后,仍然需要调用 Release()
真正意义上去释放该锁。如果完全不调用 Retire()
则退化到了传统的 2PL 算法。
上图中(2)展示了 Bamboo 中锁对象的结构。传统的 2PL 算法中,锁对象只包含 owners 列表(保存当前拥有该锁的事务)和 waiter 列表(保存当前等待该锁的事务)。在 Bamboo 中新增了 retired 列表,用来表示哪些事务在该锁上进行了 Retire()
操作。
如果一个事务调用了 Retire()
,会将该事务从 owner 列表移到 retired 列表。调用 Release()
时会将该事务从 retired 或 owner 列表中移除。事务进行 Lock()
操作判断加锁冲突时,只需要和 owner 中的事务进行冲突检测。
retired 列表最主要的作用就是维护了事务的依赖关系。如果没有 Retire()
,事务 T1 更新完 A ,立刻释放锁,这个时候 T2 加锁更新 A。T2 读取了 T1 未提交的数据,如果 T1 最后没有提交而是回滚了,T2 如何处理?
利用 Retire()
接口和 retired 列表就可以很好的维护这种依赖关系。每个事务维护了一个引用数,用来记录它依赖其他事务的数量,该事务每次请求加锁时,如果成功加锁,需要和该锁的 retired 列表中的事务进行冲突检测,如果有冲突,引用数就加1,每有一个依赖的事务提交了,该引用数就减1。 只有当引用数为0的时候,该事务才可以被提交。如果某个事务回滚了,所有依赖它的事务都需要回滚。
前面提到了如果一个事务abort了,所有依赖它的事务都需要abort。这样就会产生级联aborts,Bamboo 中使用 Retire()
会使得系统中存在更多的事务依赖关系,造成更严重的级联aborts。针对这个作者给了一些建议,如何来减少级联aborts。比如,
(1)在 Retire()
收益较少时就不进行 Retire()
。通常来说,如果数据更新出现的位置越靠近事务结束的地方,Retire()
的收益就越小。
因为事务结束时总是会释放锁。锁释放提前的时间变短了,收益自然也就小了。论文中提出了一个 delta 的参数,
如果更新操作位于整个事务的后 delta 的部分,就不进行Retire()
,而是等到事务结束时直接释放锁。
(2)减少 read-after-write 时造成的aborts。事务 Retire 锁之后会保存该数据的一个本地副本,
如果后续需要读当前数据,只需要从本地副本中读,而不需要abort已经更新了这个数据的其他事务。
作者还通过一系列的数据分析,详细分析了Bamboo在减少事务等待时间上的收益和级联aborts时的损失,通过理论分析得出 Bamboo 可以提升总的吞吐率。详细的分析过程就不在这里给出了,感兴趣的读者可以去看看原文。理论分析是需要基于很多假设的,结果也只有一些参考意义。
作者在开源数据库 DBx1000中实现了Bamboo的这个算法。
原文中的实验结果非常丰富,对比了不同算法、不同工作负载下的加速比。但是由于篇幅限制,这里只给出了两组实验结果。如下图所示,图中的比较基准是基于 wound-wait 的 2PL (在图中简称为 WW)。
上图中(1)横坐标表示的是不同客户端的线程数,也可以理解成工作负载的并发程度。纵坐标是Bamboo对比WW的加速比。图中三个不同颜色的线,表示每个事务中的操作数不同。在该图的负载中,只有 1 个 read-modify-write 的热点,该热点在事务的最开始,事务中的其他操作都是读操作,这种情况下 Bamboo 的收益应该是最高的。从图中我们也可以看到加速比随着线程数(并发数)不断增加而增加,Bamboo的加速比也在增加。最后趋于饱和,这个受限于机器本身的性能。而且事务中操作数越多时,加速比越高。因为热点数据是在每个事务的开始,事务的操作数越多,释放锁的时间就提前的越多,其他事务的等待时间的减少程度就越大。
上图中(2)展示的是热点位置不同时,Bamboo 和 WW 的吞吐率的对比。横坐标表示的是热点的位置,0表示热点在事务的开始,1表示热点在事务的结束位置,比如0.5表示的是热点在事务的中间位置。纵坐标表示的是吞吐率。这个结果也是符合预期的,热点位置越靠前,Bamboo性能提升就越多。如果热点在事务结束处,几乎没有提升了。因为这个时候Bamboo算法发现 retire 没有收益,就不会执行 retire。算法也就退化到了传统的 2PL。
关于PolarDB热点行优化,前面也有一些文章已经介绍了,所以这里也不进行过于详细的介绍。
下面针对PolarDB热点优化的介绍也大量参考了前面的文章 https://help.aliyun.com/document_detail/178149.html。
在电商平台业务中,限购、秒杀是常用的促销手段。在这些场景下,大量对热点行的更新请求在极短时间间隔内到达后台数据库系统,必然造成严重的行锁竞争和等待,影响系统性能。
如果一个更新请求等待执行的时间变长,将会对业务层面产生显著负面影响。
针对上述问题,单纯提高计算机硬件配置已经无法满足这样的低延迟需求。因此PolarDB在数据库内核层进行了创新性的优化,不但能够自动识别热点行更新请求,而且将一定时间间隔内对同一数据行的更新操作进行分组,不同分组采用流水线的方式并行处理,通过这些优化,极大地提升了系统的性能。
上图展示了热点组提交的流程图。具体如下:
(1)对于需要进行热点优化的SQL语句(用户可以在SQL语句中设置参数表示需要进行优化),首先会对更新的主键或唯一键进行hash,然后根据hash值将对应的请求放到队列中,也就是同一个队列中更新的都是相同的主键或唯一键。同一个组内的第一个更新操作为Leader,其读取目标数据行并且加锁,后续更新操作为Follower,对目标数据行加锁时,如果发现Leader已经持有行锁,不需要等待,直接获得行锁。这样一个组在只需要加一次锁,大大减少了锁竞争开销。当一个组加锁后在进行处理时,所有针对该行的更新操作都需要在队列中等待,等当前组提交完了,队列中的请求会形成一个行的组进行处理。也就是说对一行的操作来说,系统中总是存在两个组,一个组正在处理请求,另外一个组正在队列中。上一个组正在处理请求时,所有的新请求都放入到下一个组。当上一个组提交完了,当前队列中的所有请求形成一个新的组进行处理,后续的请求放入队列形成下一个组。有点类似于流水线的处理方式。
(2)PolarDB是以B-tree索引的方式管理数据的,每次执行查询时,都需要遍历索引才能定位到目标数据行,数据表越大,索引层级越多,遍历时间就越长。在前面提到的对更新操作进行分组的机制中,只有每组的Leader遍历索引定位数据行,之后把更新后的数据行缓存(row cache)在内存中,同组的Follower加锁成功后,直接从内存中读取目标数据行,而不需要再次遍历索引。这样一来,从整体上减少了索引遍历的次数和时间开销。
我们利用 sysbench 模拟了一个库存更新的场景。采用 8 核 CPU 32GB 内存规格的 PolarDB 实例进行测试。
上面的实验室结果展示了 PolarDB 中不同线程数下开启热点行优化和没开启行优化的性能对比。左图展示的是吞吐,右图是延迟。我们发现随着线程数的增加,热点行优化的性能提升越来越大,最后趋于稳定。这主要是因为线程数越多,锁竞争越剧烈,使用热点行优化的收益越明显。
这两篇文章也有介绍如何在PolarDB中使用这个热点优化功能,同时也展示了一些测试结果,
https://help.aliyun.com/document_detail/178149.html,http://mysql.taobao.org/monthly/2020/02/03/。
热点行的锁竞争问题是数据库中的一个常见问题。PolarDB 和 Bamboo 其实都是用了相似的思想进行优化。都是在热点行上,让一个事务可以读到另外一个事务未提交的数据。在 PolarDB 上通过组提交的方式来实现,本质上来说,在一个组中 follower 的事务读到了 leader 事务未提交的数据。Leader 拿到行锁后,follower就不需要再申请行锁,也就类似于 Bamboo 中一个事务更新完数据后就 retire lock,其他事务就可以直接加锁。但作为一款商业数据库,为了系统的稳定性,PolarDB 的做法也比较保守一些,默认热点行的优化是关闭的,需要用户在SQL语句中添加一些标记,告诉数据库当前更新需要被优化。而 Bamboo 作为学术研究,在算法设计方面也更加通用和激进一些,所有更新都可以提前释放锁,所有事务都可以读到其他事务未提交的数据,其实现是基于DBx1000这种实验型的DBMS来做的,其难度也会远小于在InnoDB引擎中实现。不过作为学术研究,确实应该需要更加大胆的尝试和创新。
]]>在NVMe技术中,namespace是主机软件可访问的逻辑块地址(LBA)的集合。namespace ID(NSID)是控制器对namespace访问的标识符。namespace不是块的物理隔离,而是主机软件可寻址的逻辑块的隔离。
在Linux中,每一个namespace在设备中都以唯一的标识符出现。如 /dev/nvme0n1
表示controller 0的namespace 1。
主机软件将NVMe SSD分解为多个namespace的原因有很多:用于逻辑隔离,多租户,安全隔离(每个namespace单独加密),对某些namespace进行写保护,利用overprovisioning以提高写入性能和耐久性等。
默认情况下,在NVMe SSD上,namespace的大小等于制造商确定的LBA的大小。 每个namespace在主机软件中均作为单独的目标设备显示。
Namespace Size (NSZE) :namespace包含的逻辑块的个数(从LBA 0到LBA n-1)
Namespace Capacity (NCAP) :在任何时间点可以分配的最大逻辑块数
Namespace Utilization (NUSE) :当前在名称空间中分配的逻辑块数
由于thin provisioning的缘故,size和capacity可以是不一样的。
查看所有namespace: nvme list
查看某个namespace: nvme id-ns /dev/nvme0n1
创建新的namespace
(1)从controller上分离所有namespace:nvme detach-ns /dev/nvme0 –-namespace-id=1 –-controllers=0
(2)删除分离掉的namespace: nvme delete-ns /dev/nvme0 –-namespace-id=1
(3)创建新的namespace: nvme create-ns /dev/nvme0 –s 11995709440 –c 1199570940 –f 0 –d 0 -m 0
nvme create-ns
的用法:
Options:
[ –nsze=, -s ] — size of ns
[ –ncap=, -c ] — capacity of ns
[ –flbas=, -f ] — FLBA size
[ –dps=, -d ] — data protection capabilities
[ –nmic=, -m ] — multipath and sharing capabilities
[ –block-size=, -b ] — target block size
[ –timeout=, -t ] — timeout value, in milliseconds
size和capacity的单位都是逻辑块的大小。
(4)绑定新的namespace到controller: nvme attach-ns /dev/nvme0 –-namespace-id=1 –-controllers=0
(5)重置controller使更改可见: nvme reset /dev/nvme0
(6)查看:nvme list
原文:https://nvmexpress.org/resources/nvm-express-technology-features/nvme-namespaces/
]]>官网就可以直接买到票。 https://cypressmountain.ltibooking.com/
票分很多种,有团队票,单次的票,多次票, 还可以同时选择租用设备。
下面选择 tickets+ rentals 为例。
左边选择票的种类,右边可以选择全天票或者下午票。下午票的时间可以参考官网介绍,不同季节不一样。
这里的 rentals 包含 skis 或者 snowboard (到的时候可以二选一), boots 和 poles.
如果想要头盔需要在付钱的时候额外添加。
不包含手套,手套租不了,可以到那里再买。
衣服的话可以到了再租大概 30 CAD.
开车的话直接导航过去就好了。
如果坐公共交通的话,官方有大巴车可以上山。
如果坐大巴的话,官网 http://cypresscoachlines.com/ 有大巴的时刻表和上车地点。
大巴车票可以上车的时候找司机买票,每人 25 CAD , 往返,保存好车票,回来可用。
到了之后需要先在线填一个表格。check in 的大厅有很多电脑可以用来填,也可以提前在家在他们的官网上填好,主要是提供一些个人信息以及确认一些条款,最后需要签名。
完了之后,再去前台 check in, check in 完会给一个门票,如果订单租了东西,会给几个领东西的小票,然后拿着小票就可以去领东西了。租用东西需要押金,现金或者信用卡都可以。
]]>运行
1 | wget https://git.io/vpnsetup-centos -O vpnsetup.sh && sudo sh vpnsetup.sh |
结束后会生成
Server IP: *****
IPsec PSK: *****
Username: *****
Password: *****
直接用这个信息就可以登陆了,就是这么简单粗暴。
运行完成后,会在当前目录下生成 vpnsetup.sh。 你也可以在该文件内设置以上信息,这样生成的就不是随机的了。
启用 ipsec 服务以在启动时启动:sudo systemctl enable ipsec
IPsec PSK 存在 /etc/ipsec.secrets 中,所有 VPN 用户共享相同的 IPsec PSK,可以通过更改行来设置新的。
下载脚本:
1 | wget -O add_vpn_user.sh https://raw.githubusercontent.com/hwdsl2/setup-ipsec-vpn/master/extras/add_vpn_user.sh |
添加用户:
1 | sudo sh add_vpn_user.sh 'username' 'password' |
删除用户:
1 | sudo sh del_vpn_user.sh 'username' |
(1) 官网
https://spdk.io
(2) Accelerate Your NVMe Drives with SPDK
https://software.intel.com/en-us/articles/accelerating-your-nvme-drives-with-spdk
(3) NVMeDirect:超越SPDK
http://www.ssdfans.com/blog/2017/08/03/nvmedirect%EF%BC%9A%E8%B6%85%E8%B6%8Aspdk1/3/
(4) 深入理解SPKD之三:重要API接口
https://blog.51cto.com/xiamachao/2350486
(5) SPDK示例代码分析
https://blog.csdn.net/zlarm/article/details/79151138
(6) SPDK/NVMe存储技术分析
https://www.cnblogs.com/vlhn/archive/2017/10.html
https://www.cnblogs.com/vlhn/archive/2017/11.html
https://www.cnblogs.com/vlhn/archive/2017/12.html
https://www.cnblogs.com/vlhn/archive/2018/01.html
下载 FIO 源码到 fio_dir 目录下, git clone https://github.com/axboe/fio
, fio_dir 在这里只是举例,可以是其他目录.
1 | cd fio && git checkout fio-3.3 |
推荐使用 fio-3.3,最后也可以不 make install
下载 spdk 到 spdk_dir 目录下(spdk_dir 在这里只是举例,可以是其他目录)。
1 | git clone https://github.com/spdk/spdk |
修改 spdk/CONFIG
文件中的 CONFIG_FIO_PLUGIN=
为 FIO 的路径。
编译:
1 | cd spdk |
--with-fio=
后面添加 fio 的目录。configure 后面可以再加其他配置,比如 --with-shared
会编译生成总的 libspdk.so
链接库,否则只会生成许多单个的链接库。make install
会把 spdk 安装到某个路径。比如 /usr/local/lib 之类的。可以自行查看,必须确保该路径在动态链接库的默认搜索路径中。可以自己设置链接库的搜索路径。
修改测试用例 spdk/examples/nvme/fio_plugin/fio_plugin/example_config.fio
, 添加 filename
, 如
filename=trtype=PCIe traddr=0000.04.00.0 ns=1
或者 filename=trtype=RDMA adrfam=IPv4 traddr=192.168.100.8 trsvcid=4420 ns=1
traddr=0000.04.00.0
的地址可以通过 lspci | grep SSD
查看
测试:
1 | LD_PRELOAD=spdk_dir/spdk/examples/nvme/fio_plugin/fio_plugin fio_dir/fio/fio example_config.fio |
https://github.com/spdk/spdk/tree/master/examples/nvme/fio_plugin
https://github.com/spdk/spdk/issues/367
]]>(1) RocksDB 写入流程详解
https://zhuanlan.zhihu.com/p/33389807
(2) RocksDB——Put
https://www.jianshu.com/p/daa18eebf6e1
(3) RocksDB写入数据过程DBImpl::Write()源代码分析
https://blog.csdn.net/wang_xijue/article/details/46521605
(4) 并发写-RocksDB源码剖析(3)
http://www.pandademo.com/2016/10/parallel-write-rocksdb-source-dissect-3/
(5) Rocksdb的Put()
http://www.leviathan.vip/2018/02/27/Rocksdb%E7%9A%84Put/
(6) Rocksdb 代码学习 写流程2 (memtable写)
https://blog.csdn.net/u014361034/article/details/62217744
(7) Rocksdb的Memtable
http://www.leviathan.vip/2018/02/06/Rocksdb%E7%9A%84memtable/
(1) RocksDB · WAL(WriteAheadLog)介绍
http://mysql.taobao.org/monthly/2018/04/09/
(2)【Rocksdb实现及优化分析】 JoinBatchGroup
http://kernelmaker.github.io/Rocksdb_Study_1
(1) RocksDB · 数据的读取(一)
http://mysql.taobao.org/monthly/2018/11/05/
(2) RocksDB · 数据的读取(二)
http://mysql.taobao.org/monthly/2018/12/08/
(1) 【RocksDB实现分析及优化】TransactionDB
https://kernelmaker.github.io/transactiondb-intro
(2) 【Rocksdb实现分析及优化】enable_pipelined_write
https://kernelmaker.github.io/Rocksdb_pipeline_write
(3) rocksdb源码解析:log文件恢复
https://blog.csdn.net/dongfengxueli/article/details/66975838
(1) 理解 C++ 的 Memory Order
http://senlinzhan.github.io/2017/12/04/cpp-memory-order/
(1) TransactionDB源码分析
https://yq.aliyun.com/articles/609664
(2) WritePrepared Transactions
https://github.com/facebook/rocksdb/wiki/WritePrepared-Transactions
(3) WriteUnprepared Transactions
https://github.com/facebook/rocksdb/wiki/WriteUnprepared-Transactions
(4) Two Phase Commit
https://github.com/facebook/rocksdb/wiki/Two-Phase-Commit-Implementation
(5) TransactionDB介绍
https://zhuanlan.zhihu.com/p/39427559
(2) Linux fsync和fdatasync系统调用实现分析(Ext4文件系统)
https://blog.csdn.net/luckyapple1028/article/details/61413724
(3) 文件IO系统调用内幕
https://lrita.github.io/2019/03/13/the-internal-of-file-syscall/
(4) 深入理解Fsync
https://www.cnblogs.com/hustcat/p/3283955.html
(5) Linux Direct IO机制分析
http://oenhan.com/ext3-fs-directio
(6) Linux 内核写文件流程
http://oenhan.com/linux-kernel-write
(7) Linux内核三驾马车之-IO管理
https://blog.acean.vip/post/linux-kernel/gai-shu-linuxnei-he-san-jia-ma-che-zhi-ioguan-li#toc_29
(8) 全链路分析数据落盘机制-文件系统层及块设备层
http://blog.zw1m.com/tags/IO/
(9) Linux 中直接 I/O 机制的介绍
https://www.ibm.com/developerworks/cn/linux/l-cn-directio/
(10) direct IO中io合并的奇怪现象分析
http://www.sysnote.org/2014/05/19/directio-merge/
(11) Linux 缓存写回机制
http://oenhan.com/linux-cache-writeback
(12) 使用 FUSE 开发自己的文件系统
https://www.ibm.com/developerworks/cn/linux/l-fuse/index.html
(13) Linux 内核的文件 Cache 管理机制介绍
https://www.ibm.com/developerworks/cn/linux/l-cache/index.html
(14) Linux Block Driver
http://oliveryang.net/2016/04/linux-block-driver-basic-1/
http://oliveryang.net/2016/04/linux-block-driver-basic-2/
http://oliveryang.net/2016/04/linux-block-driver-basic-3/
http://oliveryang.net/2016/04/linux-block-driver-basic-4/
http://oliveryang.net/2016/10/linux-block-driver-basic-5/
http://oliveryang.net/2016/10/linux-block-driver-basic-6/
http://oliveryang.net/2016/10/linux-block-driver-basic-7/
(15) Linux File System
http://oliveryang.net/2016/05/linux-file-system-basic-1/
http://oliveryang.net/2016/05/linux-file-system-basic-2/
http://oliveryang.net/2016/05/linux-file-system-basic-3/
http://oliveryang.net/2016/05/linux-file-system-basic-4/
http://oliveryang.net/2016/05/linux-file-system-basic-5/
(16) 没有什么好神秘的: wait_on_page_bit
https://www.cnblogs.com/honpey/p/4931962.html
(17) Linux通用块设备层
http://www.ilinuxkernel.com/files/Linux.Generic.Block.Layer.pdf
AbstractCommitLogService 类中的 start() 函数新建 SyncRunnable 线程,并运行该线程。
该线程运行的函数是 run(), run() 中不停调用 sync(). sync() 利用 parkNanos() 周期性进行 sync 操作, 但这只对 group 和 periodical 的 commitlog 有效,对于 batch 的 commitlog 会在 BatchCommitLogService 类的 maybeWaitForSync() 函数中显示调用 unpark() 唤醒线程。
CommitLog 类中,利用 construct() 生成一个具体的 AbstractCommitLogService 类和一个 AbstractCommitLogSegmentManager 类。
executor 是一个具体的 AbstractCommitLogService 类, PeriodicCommitLogService, BatchCommitLogService 和 GroupCommitLogService 中的一个。
segmentManager 是一个具体的 AbstractCommitLogSegmentManager 类, CommitLogSegmentManagerCDC 和 CommitLogSegmentManagerStandard 中的一个。
最后 CommitLog 调用 start() 启动 segmentManager.start() 和 executor.start()
executor.start() 也就是调用 AbstractCommitLogService 的 start() 函数启动一个线程周期性执行 sync() 操作。
segmentManager.start() 也就是调用 AbstractCommitLogSegmentManager 的 start() 函数,启动一个后台线程分配 CommitLogSegment
运行到 1341 行时的函数栈如下图所示。1341行新建了一个线程,在1347行时运行。
beginWrite() 中调用 CommitLog.instance.add(mutation) 写入 commitlog。
运行到 CommitLog.instance.add(mutation) 时的函数栈如下:
CommitLog.instance.add() 函数实现 commitlog 的提交
上图中的 executor.finishWriteFor(alloc) 会调用 AbstractCommitLogService 的 finishWriteFor() , 从而调用相应子类的 maybeWaitForSync()。
BatchCommitLogService 中的 maybeWaitForSync() 函数会调用 requestExtraSync() 唤醒 sync 线程进行 sync。然后调用 awaitDiskSync() 等待 commitlog 持久化完成。
GroupCommitLogService 中的 maybeWaitForSync() 函数会调用 awaitDiskSync() 等待 commitlog 持久化完成, 依赖后台 sync 线程的周期性 sync 操作。
PeriodicCommitLogService中的 maybeWaitForSync() 函数, blockWhenSyncLagsNanos 是 periodic commitlog 的周期, expectedSyncTime = System.nanoTime() - blockWhenSyncLagsNanos,表示 expectedSyncTime 之前的 commitlog 应该要持久化完。 lastSyncedAt 表示上次持久化的时间。 调用 awaitSyncAt() 等待 expectedSyncTime 之前的 commitlong 持久化完。
]]>https://blog.csdn.net/qiaojialin/article/details/78408511
https://blog.csdn.net/hellohellohhhhh/article/details/78410379
http://ju.outofmemory.cn/entry/116815
https://zqhxuyuan.github.io/2016/10/13/Cassandra-Code-Network/
https://blog.csdn.net/xuqianghit/article/details/6943533
https://blog.longyb.com/2019/03/03/cassandra_write_path/
Cassandra writes in depth. https://blog.softwaremill.com/cassandra-writes-in-depth-6ea8d7581eb
]]>https://blog.pythian.com/how-to-build-your-very-own-cassandra-4-0-release/
(1) Make sure you have your prerequisites
Java SDK 1.8 or Java 1.11 Open Source or Oracle
Ant 1.8
Git CLI client
Python >=2.7<3.0
(2) Download the GIT repository
1 | git clone https://gitbox.apache.org/repos/asf/cassandra.git |
(3) Build your new Cassandra release
1 | cd cassandra |
(4) Run Cassandra
1 | cd ./bin |
(5) Have fun
1 | ./nodetool status |
(6) Some problems you may encounter:
(6.1) package org.apache.tools.ant.taskdefs.optional.junit does not exist
Solution: sudo yum install ant-junit
https://docs.datastax.com/en/developer/cpp-driver/2.13/topics/building/
(1) install (https://github.com/brianfrankcooper/YCSB)
YCSB requires the use of Maven 3.
1 | git clone https://github.com/brianfrankcooper/YCSB.git |
(2) test
https://github.com/brianfrankcooper/YCSB/tree/master/cassandra
https://blog.csdn.net/hs794502825/article/details/17334915
for cassandra:
1 | ./cqlsh |
for ycsb:
1 | ./bin/ycsb load cassandra-cql -P workloads/workloada -p hosts=localhost |
https://blog.csdn.net/qiaojialin/article/details/73558971
(1) Download
1 | git clone https://gitbox.apache.org/repos/asf/cassandra.git |
(2) Generate idea files
1 | cd cassandra |
(3) Open in IDEA
Main class:
1 | org.apache.cassandra.service.CassandraDaemon |
VM options:
1 | -Dcassandra-foreground=yes |
Use classpath of module: cassandra
]]>2022/01/01 Database · 理论基础 · B+树数据库加锁历史
2022/01/02 MySQL · 引擎特性 · Redo Log record编码格式
2022/01/03 SQL Server · 引擎特性 · 从SQL Server看列式存储
2022/01/04 MySQL · 源码分析 · TABLE信息的生命周期
2021/12/01 PostgreSQL · 引擎特性 · PostgreSQL 14 新特性浅析
2021/12/02 MySQL · 引擎特性· InnoDB之UNDO LOG介绍
2021/12/03 PolarDB · 引擎特性 · Nonblock add column
2021/12/04 PolarDB · 引擎特性 · B-tree 并发控制优化
2021/11/01 PolarDB · 引擎特性· 闪回查询让历史随时可见
2021/11/02 MySQL · 周边工具 · MySQL InnoDB inno_space 工具介绍
2021/11/03 MySQL · 源码阅读· MySQL 如何响应 KILL
2021/10/01 MySQL · 引擎特性 · 庖丁解InnoDB之UNDO LOG
2021/10/02 数据库系统 · 事物并发控制 · Two-phase Lock Protocol
2021/10/03 MySQL · 源码分析 · BLOB字段UPDATE流程分析
2021/10/04 MySQL · 源码分析· 跟着MySQL 8.0 学 C++:scope_guard
2021/10/05 MySQL · 源码分析 · CSV 引擎详解
2021/09/01 MySQL · 源码分析 · 事务锁调度分析
2021/09/02 PolarDB · 引擎特性 · DDL物理复制优化
2021/09/03 MySQL · 源码分析 · Performance Schema 初始化过程
2021/09/04 MySQL · 源码详解 · mini transaction详解
2021/08/01 MySQL · 最佳实战 · SQL编码转换浅析
2021/08/02 MySQL · 源码分析 · 详解 Data Dictionary
2021/08/03 POLARIS · 引擎分析 · 基于单机数据库扩展的分布式查询处理引擎
2021/08/04 MySQL · 源码分析 · 参数解析流程
2021/07/01 POLARDB · 引擎特性 · Logic Redo
2021/07/02 MySQL · 源码分析 · btr_cur_search_to_nth_level 函数分析
2021/07/03 PostgreSQL · 内核特性 · 死锁检测与解决
2021/07/04 MySQL · 源码分析 · 条件优化与执行分析
2021/07/05 MySQL · 源码分析 · DDL log与原子DDL的实现
2021/07/06 MySQL · 功能介绍 · GIS功能介绍
2021/07/07 MySQL · 源码分析 · 临时表与TempTable存储引擎Allocator
2021/06/01 MySQL · 性能优化 · Undo Log IO优化
2021/06/02 MySQL · 源码分析 · Semi-join优化与执行逻辑
2021/06/03 MySQL · 源码分析 · Range (Min-Max Tree)结构分析
2021/06/04 MySQL · 源码分析 · Order By优化逻辑代码分析
2021/06/05 MySQL · 内核特性 · Btree 顺序插入优化及问题
2021/06/06 MySQL · 内核特性 · 分区表下的多种索引类型
2021/05/01 PolarDB · 新特性 · 路在脚下, 从BTree 到Polar Index
2021/05/02 MySQL · 引擎特性 · 死锁检测
2021/05/03 MySQL · 内核特性 · 直方图
2021/04/01 MySQL · 内核特性 · Automatic connection failover
2021/04/02 MongoDB · 内核特性 · 一致性模型设计与实现
2021/04/03 MySQL · 资源管理 · PFS内存管理分析
2021/04/04 MySQL · HTAP · 分析型执行引擎
2021/04/05 MySQL · 内核分析 · InnoDB主键约束和唯一约束的实现分析
2021/04/06 MySQL · 源码阅读 · Window function解析
2021/03/01 MySQL · 引擎特性 · InnoDB Faster truncate/drop table space
2021/03/02 MySQL · 源码阅读 · Decimal 的实现方法
2021/03/03 PolarDB · 最佳实践 · 并行查询优化器的应用实践
2021/03/04 PolarDB · 引擎特性 · 物理复制热点页优化
2021/03/05 DataBase · 引擎特性 · OLAP/HTAP列式存储引擎概述
2021/03/06 MySQL · 源码阅读 · 白话Online DDL
2021/02/01 PolarDB · 特性分析 · Explain Format Tree 详解
2021/02/02 MySQL · 源码阅读 · InnoDB Export/Import Tablespace解析
2021/02/03 MySQL · 源码解析 · MySQL 8.0.23 Hypergraph Join Optimizer代码详解
2021/02/04 MySQL · 性能优化 · InnoDB 事务 sharded 锁系统优化
2021/02/05 DataBase · 社区动态 · 数据库中的表达式
2021/02/06 MySQL · 源码分析 · Group by优化逻辑代码分析
2021/02/07 MySQL · 源码阅读 · X-plugin的传输协议
2021/02/08 MySQL · 源码阅读 · MySQL8.0 innodb锁相关
2021/02/09 PolarDB · 优化改进 · 使用窗口聚合函数来将子查询解关联
2021/01/01 PolarDB · 源码解析 · 深度解析PolarDB的并行查询引擎
2021/01/02 MySQL · 源码阅读 · 内部XA事务
2021/01/03 PolarDB · 优化改进 · DDL的优化和演进
2021/01/04 Database · 最佳实践 · 内存索引指南
2021/01/05 Database · 最佳实践 · 高性能 Hash Join 算法实现简述
2021/01/06 MySQL · 源码阅读 · Innodb内存管理解析
2021/01/07 X-Engine · 引擎特性 · 并行DDL
2021/01/08 PostgreSQL · 新增特性 · PG 13 新特性
2020/12/01 Database · 发展前沿 · NewSQL数据库概述
2020/12/02 AliSQL · 内核新特性 · 2020技术总结
2020/12/03 MySQL · 引擎特性 · page cleaner 算法
2020/12/04 PolarDB · 引擎特性 · 历史库
2020/12/05 MySQL · 内核特性 · 统计信息的现状和发展
2020/11/01 MySQL · 源码分析 · MySQL Statement Digest
2020/11/02 Database · 理论基础 · B-tree 物理结构的并发控制
2020/11/03 MySQL · 源码阅读 · 创建二级索引
2020/11/04 MySQL · 源码阅读 · Secondary Engine
2020/10/01 MySQL · 源码分析 · 子查询优化源码分析
2020/10/02 MySQL · 源码分析 · undo tablespace 的发展
2020/10/03 MySQL · 最佳实践 · How to read the lock information from debugger
2020/09/01 MySQL · 性能优化 · PageCache优化管理
2020/09/02 MySQL · 分布式系统 · 一致性协议under the hood
2020/09/03 X-Engine · 性能优化 · Parallel WAL Recovery for X-Engine
2020/09/04 MySQL · 源码阅读 · InnoDB伙伴内存分配系统实现分析
2020/09/05 PgSQL · 新特性探索 · 浅谈postgresql分区表实现并发创建索引
2020/09/06 MySQL · 引擎特性 · InnoDB隐式锁功能解析
2020/09/07 MySQL · Optimizer · Optimizer Hints
2020/09/08 Database · 新特性 · 映射队列
2020/08/01 MySQL · 引擎特性 · truncate table在大buffer pool下的优化
2020/08/02 MySQL · 引擎特性 · INNODB UNDO LOG分配
2020/08/03 MySQL · 内核特性 · Redo Logging动态开关
2020/08/04 MySQL · 引擎特性 · InnoDB Buffer Page 生命周期
2020/08/05 MySQL · 引擎特性 · InnoDB UNDO LOG写入
2020/08/06 MySQL · 引擎特性 · InnoDB 数据文件简述
2020/08/07 Database · 案例分析 · UTF8与GBK数据库字符集
2020/07/01 MySQL · 内核特性 · 8.0 新的火山模型执行器
2020/07/02 MongoDB · 内核特性 · wiredtiger page逐出
2020/07/03 AliSQL · 内核特性 · 快速 DDL
2020/07/04 MySQL · 内核特性 · semi-join四个执行strategy
2020/07/05 MySQL · 引擎特性 · InnoDB redo log thread cpu usage
2020/07/06 PgSQL · 引擎特性 · SQL防火墙使用说明与内核浅析
2020/06/01 AliSQL · 内核特性 · Binlog In Redo
2020/06/02 MySQL · 内核特性 · InnoDB btree latch 优化历程
2020/06/03 MySQL · 内核特性 · Attachable transaction
2020/06/04 MySQL · 内核特性 · Link buf
2020/06/05 PgSQL · 新版本调研 · 13 Beta 1 初体验
2020/05/01 Database · 技术方向 · 下一代云原生数据库详解
2020/05/02 Database · 理论基础 · 高性能B-tree索引
2020/05/03 Database · 理论基础 · ARIES/IM (一)
2020/05/04 AliSQL · 引擎特性 · Fast Query Cache 介绍
2020/05/05 MySQL · 源码分析 · 8.0 · DDL的那些事
2020/05/06 MySQL · 内核分析 · InnoDB Buffer Pool 并发控制
2020/05/07 MySQL · 源码分析 · 内部 XA 和组提交
2020/05/08 MySQL · 插件分析 · Connection Control
2020/05/09 MySQL · 引擎特性 · 基于GTID复制实现的工作原理
2020/04/01 PostgreSQL · 源码分析 · 回放分析(一)
2020/04/02 MySQL · 源码分析 · InnoDB读写锁实现分析
2020/04/03 MySQL · 最佳实践 · X-Engine并行扫描
2020/04/04 MySQL · 引擎特性 · 8.0 Window Functions 剖析
2020/04/05 MySQL · 引擎特性 · Performance_schema 内存分配
2020/04/06 MySQL · 引擎特性 · 手动分析InnoDB B+Tree结构
2020/04/07 Redis · 最佳实践 · 集群配置:Redis Cluster
2020/04/08 MongoDB · 引擎特性 · 大量集合启动加载优化原理
2020/04/09 MySQL · 引擎特性 · 8.0 Lock Manager
2020/03/01 MySQL · 引擎特性 · 8.0 Instant Add Column功能解析
2020/03/02 PgSQL · 引擎特性 · PostgreSQL 通信协议
2020/03/03 MySQL · 产品特性 · RDS三节点企业版的高可用体系
2020/03/04 AliSQL · 最佳实践 · Performance Agent
2020/03/05 MySQL · 内核分析 · InnoDB mutex 实现分析
2020/03/06 Database · 理论基础 · B link Tree
2020/03/07 MySQL · 引擎特性 · Latch 持有分析
2020/03/08 MySQL · 内核分析 · InnoDB 的统计信息
2020/03/09 MySQL · 引擎特性 · 排序实现
2020/03/10 PgSQL · 插件分析 · plProfiler
2020/02/01 MySQL · 引擎特性 · 庖丁解InnoDB之REDO LOG
2020/02/02 MySQL · 引擎特性 · InnoDB Buffer Pool 浅析
2020/02/03 MySQL · 最佳实践 · RDS 三节点企业版热点组提交
2020/02/04 MySQL · 引擎特性 · 8.0 heap table 介绍
2020/02/05 MySQL · 存储引擎 · MySQL的字段数据存储格式
2020/02/06 MySQL · 引擎特性 · MYSQL Binlog Cache详解
2020/01/01 MySQL · 引擎特性 · 二级索引分析
2020/01/02 MySQL · 引擎特性 · X-Engine OnlineDDL
2020/01/03 MySQL · 捉虫动态 · 弱序内存模型导致的死锁问题
2020/01/04 MySQL · 最佳实践 · 8.0 redo log写入性能问题分析
2020/01/05 MySQL · 引擎特性 · InnoDB redo log 之 write ahead
2020/01/06 MySQL · 引擎特性 · Innodb WAL物理格式
2019/12/01 MySQL · 引擎特性 · 动态元信息持久化
2019/12/02 MySQL · 引擎特性 · Binlog encryption 浅析
2019/12/03 MySQL · 代码阅读 · MYSQL开源软件源码阅读小技巧
2019/12/04 MySQL · 引擎特性 · 多线程调试工具DEBUG_SYNC的源码实现和使用
2019/12/05 MySQL · 引擎特性 · InnoDB Parallel read of index
2019/11/01 MySQL · 最佳实践 · 今天你并行了吗?—洞察PolarDB 8.0之并行查询
2019/11/02 MySQL · 新特征 · MySQL 哈希连接实现介绍
2019/11/03 MySQL · 最佳实践 · 性能分析的大杀器—Optimizer trace
2019/11/04 PgSQL · 未来特性调研 · TDE
2019/11/05 Database · 理论基础 · Multi-ART
2019/11/06 MySQL · 引擎特性 · RDS三节点企业版 一致性协议
2019/11/07 MySQL · 引擎特性 · RDS三节点企业版 Learner 只读实例
2019/10/01 MySQL · 引擎特性 · Innodb 表空间
2019/10/02 MySQL · 引擎特性 · POLARDB 并行查询加速全程详解
2019/10/03 MySQL · Optimizer · Parallel Index Scans, One is Better Than Two
2019/10/04 MySQL · 最佳实践 · X-Engine MySQL RDS 用户的新选择
2019/10/05 MySQL · 引擎特性 · Sequence Engine
2019/10/06 PgSQL · 应用案例 · 分组提交的使用与注意
2019/10/07 MongoDB · 最佳实践 · Spark Connector 实战指南
2019/10/08 PgSQL · 应用案例 · PG 12 tpcc - use sysbench-tpcc by Percona-Lab
2019/10/09 PgSQL · 应用案例 · 阿里云RDS PG 11开放dblink, postgres_fdw权限
2019/10/10 PgSQL · 应用案例 · Oracle 20c 新特性 - 翻出了PG十年前的特性
2019/09/01 MySQL · 引擎特性 · 临时表改进
2019/09/02 MySQL · 引擎特性 · 初探 Clone Plugin
2019/09/03 MySQL · 引擎特性 · 网络模块优化
2019/09/04 MySQL · 引擎特性 · Multi-Valued Indexes 简述
2019/09/05 AliSQL · 引擎特性 · Statement Queue
2019/09/06 Database · 理论基础 · Palm Tree
2019/09/07 AliSQL · 引擎特性 · Returning
2019/09/08 PgSQL · 最佳实践 · 回归测试探寻
2019/09/09 MongoDB · 最佳实践 · 哈希分片为什么分布不均匀
2019/09/10 PgSQL · 应用案例 · PG有standby的情况下为什么停库可能变慢?
2019/08/01 PgSQL· 引擎特性 · 多版本并发控制介绍及实例分析
2019/08/02 AliSQL · 引擎特性 · Recycle Bin
2019/08/03 MySQL · 引擎特性 · 8.0 Innodb redo log record 源码分析
2019/08/04 Database · 内存管理 · JeMalloc-5.1.0 实现分析
2019/08/05 MySQL · 引擎特性 · clone_plugin
2019/08/06 MSSQL · 最佳实践 · 启用即时文件初始化
2019/08/07 PgSQL · 特性分析 · 浅析PostgreSQL 的JIT
2019/08/08 MySQL · 引擎特性 · ROLLUP 功能用法和实现
2019/08/09 Redis · 最佳实践 · 混合存储实践指南
2019/08/10 PgSQL · 应用案例 · pgbench client_id 变量用途
2019/07/01 MySQL · 最佳实践 · Statement Outline
2019/07/02 PgSQL · 新特性解读 · undo log 存储接口(上)
2019/07/03 MySQL · 引擎特性 · Buffer Pool 漫谈
2019/07/04 MongoDB · 引擎特性 · oplog 查询优化
2019/07/05 PgSQL · 最佳实践 · pg_cron 内核分析及用法简介
2019/07/06 MySQL · 引擎特性 · CTE(Common Table Expressions)
2019/07/07 Database · 理论基础 · Mass Tree
2019/07/08 MySQL · 源码分析 · slow log
与CSV
引擎
2019/07/09 PgSQL · 应用案例 · 使用SQL查询数据库日志
2019/07/10 PgSQL · 应用案例 · PostgreSQL psql的元素周期表
2019/06/01 MySQL · 引擎特性 · 安全及权限改进相关
2019/06/02 MySQL · 最佳实践 · RDS MySQL 8.0 语句级并发控制
2019/06/03 CloudDBA · 最佳实践 · Performance Insights
2019/06/04 PgSQL · 应用案例 · 学生为什么应该学PG
2019/06/05 MongoDB · 引擎特性 · 4.2 新特性解读
2019/06/06 PgSQL · 答疑解惑 · 垃圾回收、膨胀、多版本管理、存储引擎
2019/06/07 MySQL · 引擎特性 · 说说InnoDB Log System的隐藏参数
2019/06/08 MySQL · 引擎特性 · CHECK CONSTRAINT
2019/06/09 PgSQL · 应用案例 · 如何修改PostgreSQL分区表分区范围
2019/06/10 PgSQL · 应用案例 · 什么情况下可能表膨胀
2019/05/01 MSSQL · 最佳实践 · 挑战云计算安全的存储过程
2019/05/02 MySQL · 源码分析 · 聚合函数(Aggregate Function)的实现过程
2019/05/03 PgSQL · 最佳实践 · RDS for PostgreSQL 的逻辑订阅
2019/05/04 MySQL · 引擎特性 · 通过 SQL 管理 UNDO TABLESPACE
2019/05/05 MySQL · 最佳实践 · 通过Resource Group来控制线程计算资源
2019/05/06 MySQL · 引擎特性 · Skip Scan Range
2019/05/07 MongoDB · 应用案例 · killOp 案例详解
2019/05/08 MySQL · 源码分析 · LinkBuf设计与实现
2019/05/09 PgSQL · 应用案例 · PostgreSQL KPI分解,目标设定之 - 等比数列
2019/05/10 PgSQL · 应用案例 · PostgreSQL KPI 预测例子
2019/04/01 MySQL · 引擎特性 · 临时表那些事儿
2019/04/02 MSSQL · 最佳实践 · 使用SSL加密连接
2019/04/03 Redis · 引擎特性 · radix tree 源码解析
2019/04/04 MySQL · 引擎分析 · InnoDB history list 无法降到0的原因
2019/04/05 MySQL · 关于undo表空间的一些新变化
2019/04/06 MySQL · 引擎特性 · 新的事务锁调度VATS简介
2019/04/07 MySQL · 引擎特性 · 增加系统文件追踪space ID和物理文件的映射
2019/04/08 PgSQL · 应用案例 · PostgreSQL 9种索引的原理和应用场景
2019/04/09 PgSQL · 应用案例 · 任意字段组合查询
2019/04/10 PgSQL · 应用案例 · PostgreSQL 并行计算
2019/03/01 PgSQL · 特性分析 · 内存管理机制
2019/03/02 MongoDB · 同步工具 · MongoShake原理分析
2019/03/03 MySQL · InnoDB · Redo log
2019/03/04 MSSQL · 最佳实践 · Always Encrypted
2019/03/05 MySQL · 源码分析 · CHECK TABLE实现
2019/03/06 PgSQL · 原理介绍 · PostgreSQL中的空闲空间管理
2019/03/07 MySQL · 引擎特性 · 8.0 Descending Index
2019/03/08 理论基础 · Raft phd 论文中的pipeline 优化
2019/03/09 MySQL · 引擎特性 · MySQL 状态信息Status实现
2019/03/10 PgSQL · 应用案例 · 使用PostgreSQL生成数独方法1
2019/02/01 POLARDB · 性能优化 · 敢问路在何方 — 论B+树索引的演进方向(中)
2019/02/02 MySQL · 引擎特性 · Inspecting the Content of a MySQL Histogram
2019/02/03 Database · 原理介绍 · Snapshot Isolation 综述
2019/02/04 MSSQL · 最佳实践 · 数据库备份加密
2019/02/05 MySQL · 引擎特性 · The design of mysql8.0 redolog
2019/02/06 MySQL · 源码分析 · 8.0 Functional index的实现过程
2019/02/07 PgSQL · 源码解析 · Json — 从使用到源码
2019/02/08 MySQL · 最佳实践 · 如何使用C++实现 MySQL 用户定义函数
2019/02/09 MySQL · 最佳实践 · MySQL多队列线程池优化
2019/02/10 PgSQL · 应用案例 · PostgreSQL 时间线修复
2019/01/01 POLARDB · 理论基础 · 数据库故障恢复机制的前世今生
2019/01/02 POLARDB · 最佳实践 · POLARDB不得不知道的秘密(二)
2019/01/03 MongoDB · 原理介绍 · MongoDB从事务到复制
2019/01/04 PgSQL · 引擎特性 · PostgreSQL 并行查询概述
2019/01/05 MSSQL · 最佳实践 · 如何打码隐私数据列
2019/01/06 Redis · 引擎特性 · Lua脚本新姿势
2019/01/07 Mariadb · 源码分析 · proxy protocol
2019/01/08 MySQL · InnoDB · tablespace源码分析
2019/01/09 MySQL · 最佳实践 · MySQL中的IO共享操作
2019/01/10 PgSQL · 应用案例 · native partition 分区表性能优化
2018/12/01 Database · 原理介绍 · 数据库的事务与复制
2018/12/02 PgSQL · 引擎特性 · PostgreSQL Hint Bits 简介
2018/12/03 MSSQL · 最佳实践 · 行级别安全解决方案
2018/12/04 MySQL · 原理介绍 · 再议MySQL的故障恢复
2018/12/05 POLARDB · 引擎特性 · 物理复制解读
2018/12/06 Redis · 原理介绍 · 利用管道优化aofrewrite
2018/12/07 PgSQL · 原理介绍 · PostgreSQL行锁实现
2018/12/08 MySQL · RocksDB · 数据的读取(二)
2018/12/09 PgSQL · 应用案例 · PG 11 并行计算算法,参数,强制并行度设置
2018/12/10 PgSQL · 应用案例 · PostgreSQL IoT,车联网 - 实时轨迹、行程实践
2018/11/01 POLARDB · 理论基础 · 敢问路在何方 — 论B+树索引的演进方向(上)
2018/11/02 Database · 原理介绍 · Google Percolator 分布式事务实现原理解读
2018/11/03 Database · 原理介绍 · 关于Paxos 幽灵复现问题
2018/11/04 MySQL · 引擎特性 · InnoDB MVCC 相关实现
2018/11/05 MySQL · RocksDB · 数据的读取(一)
2018/11/06 PgSQL · 最佳实践 · EXPLAIN 使用浅析
2018/11/07 MSSQL · 最佳实践 · 列加密查询性能问题及解决方案
2018/11/08 MySQL · 最佳实践 · 性能问题多维度诊断
2018/11/09 MySQL · 最佳实践 · 8.0 CTE和窗口函数的用法
2018/11/10 PgSQL · 应用案例 · Heap Only Tuple (降低UPDATE引入的索引写IO放大)
2018/10/01 POLARDB · 最佳实践 · POLARDB不得不知道的秘密
2018/10/02 MySQL · 引擎特性 · Cost Model,直方图及优化器开销优化
2018/10/03 MSSQL · 最佳实践 · 使用混合密钥实现列加密
2018/10/04 MongoDB · 引擎特性 · 复制集原理
2018/10/05 Redis · lazyfree · 大key删除的福音
2018/10/06 Database · 理论基础 · 数据库事务隔离发展历史
2018/10/07 Database · 理论基础 · 关于一致性协议和分布式锁
2018/10/08 MySQL · RocksDB · Level Compact 分析
2018/10/09 MySQL · RocksDB · TransactionDB 介绍
2018/10/10 PgSQL · 应用案例 · 相似人群圈选,人群扩选,向量相似 使用实践
2018/09/01 MySQL · 引擎特性 · B+树并发控制机制的前世今生
2018/09/02 MySQL · 源码分析 · Innodb缓冲池刷脏的多线程实现
2018/09/03 MySQL · 引擎特性 · IO_CACHE 源码解析
2018/09/04 MySQL · RocksDB · Memtable flush分析
2018/09/05 MSSQL · 最佳实践 · 使用非对称秘钥实现列加密
2018/09/06 MongoDB · 引擎特性 · MongoDB索引原理
2018/09/07 MySQL · 案例分析 · RDS MySQL线上实例insert慢常见原因分析
2018/09/08 Redis · 引擎特性 · 基于 LFU 的热点 key 发现机制
2018/09/09 MySQL · myrocks · collation 限制
2018/09/10 PgSQL · 应用案例 · PostgreSQL 图像搜索实践
2018/08/01 MySQL · 引擎特性 · 主库 binlog 概览
2018/08/02 MySQL · RocksDB · Write Prepared Policy
2018/08/03 MSSQL · 最佳实践 · 使用对称秘钥实现列加密
2018/08/04 MySQL · 特性分析 · InnoDB对binlog_format的限制
2018/08/05 MongoDB · 引擎特性 · sharding chunk 分裂与迁移详解
2018/08/06
2018/08/07 MySQL · 源码分析 · 连接与认证过程
2018/08/08 MySQL · RocksDB · MemTable的写入逻辑
2018/08/09 PgSQL · 最佳实践 · Greenplum RoaringBitmap多阶段聚合
2018/08/10 PgSQL · 应用案例 · 高并发空间位置更新、多属性KNN搜索并测
2018/07/01 MySQL · 引擎特性 · WAL那些事儿
2018/07/02 MySQL · 源码分析 · 8.0 原子DDL的实现过程续
2018/07/03 MongoDB · 引擎特性 · 事务实现解析
2018/07/04 MySQL · RocksDB · 写入逻辑的实现
2018/07/05 MySQL · 源码分析 · binlog crash recovery
2018/07/06 PgSQL · 新特征 · PG11并行Hash Join介绍
2018/07/07 MySQL · myrocks · clustered index特性
2018/07/08 MSSQL · 最佳实践 · 实例级别数据库上云RDS SQL Server
2018/07/09 MySQL · 最佳实践 · 一个TPC-C测试工具sqlbench使用
2018/07/10 PgSQL · 应用案例 · PostgreSQL flashback(闪回) 功能实现与介绍
2018/06/01 MySQL · 特性分析 · 8.0 对WAL的设计修改
2018/06/02 MariaDB · 特性分析 · 基于GTID的复制分析
2018/06/03 MySQL · 最佳实践 · 难以置信,MySQL也可以无损自由切换
2018/06/04 MySQL · 特性分析 · 8.0 WriteSet 并行复制
2018/06/05 MongoDB · 引擎特性 · writeConcern原理解析
2018/06/06 MSSQL · 最佳实践 · RDS SDK实现数据库迁移上阿里云RDS SQL Server
2018/06/07 PgSQL · 内核特性 · RDS PostgreSQL 高并发场景下提高系统吞吐量
2018/06/08 PgSQL · 应用案例 · PostgresPro buildin pool原理分析与测试
2018/06/09 MySQL · RocksDB · Column Family介绍
2018/06/10 PgSQL · 应用案例 · PostgreSQL + PostGIS 时态分析
2018/05/01 MySQL · Community · Congratulations on MySQL 8.0 GA
2018/05/02 MySQL · 社区动态 · Online DDL 工具 gh-ost 支持阿里云 RDS
2018/05/03 MySQL · 特性分析 · MySQL 8.0 资源组 (Resource Groups)
2018/05/04 MySQL · 引擎分析 · InnoDB行锁分析
2018/05/05 PgSQL · 特性分析 · 神奇的pg_rewind
2018/05/06 MSSQL · 最佳实践 · 阿里云RDS SQL自动化迁移上云的一种解决方案
2018/05/07 MongoDB · 引擎特性 · journal 与 oplog,究竟谁先写入?
2018/05/08 MySQL · RocksDB · MANIFEST文件介绍
2018/05/09 MySQL · 源码分析 · change master to
2018/05/10 PgSQL · 应用案例 · 阿里云 RDS PostgreSQL 高并发特性 vs 社区版本
2018/04/01 MySQL · 引擎特性 · InnoDB 表空间加密
2018/04/02 MongoDB · myrocks · mongorocks 引擎原理解析
2018/04/03 MySQL · 引擎特性 · InnoDB 数据页解析
2018/04/04 MySQL · MyRocks · TTL特性介绍
2018/04/05 MySQL · 源码分析 · 协议模块浅析
2018/04/06 MSSQL · 最佳实践 · 如何监控备份还原进度
2018/04/07 MySQL · 特性分析 · MySQL的预编译功能
2018/04/08 MySQL · 特性分析 · (deleted) 临时空间
2018/04/09 MySQL · RocksDB · WAL(WriteAheadLog)介绍
2018/04/10 PgSQL · 应用案例 · 相似文本识别与去重
2018/03/01 MySQL · 源码分析 · InnoDB的read view,回滚段和purge过程简介
2018/03/02 MySQL · 源码分析 · 原子DDL的实现过程
2018/03/03 MongoDB · Feature · In-place update in MongoDB
2018/03/04 MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案
2018/03/05 PgSQL · 内核优化 · Hybrid DB for PG 赋能向量化执行和查询子树封装
2018/03/06 MySQL · 特性分析 · innodb_buffer_pool_size在线修改
2018/03/07 MySQL · myrocks · 事务锁分析
2018/03/08 PgSQL · 特性分析 · 事务ID回卷问题
2018/03/09 MariaDB · 源码分析 · thread pool
2018/03/10 PgSQL · 应用案例 · 毫秒级文本相似搜索实践一
2018/02/01 MySQL · 源码分析 · 常用SQL语句的MDL加锁源码分析
2018/02/02 Influxdb · 源码分析 · Influxdb cluster实现探究
2018/02/03 MySQL · 源码分析 · 权限浅析
2018/02/04 PgSQL · 源码分析 · AutoVacuum机制之autovacuum worker
2018/02/05 MSSQL · 最佳实践 · 数据库恢复模式与备份的关系
2018/02/06 PgSQL · 最佳实践 · 利用异步 dblink 快速从 oss 装载数据
2018/02/07 MySQL · 源码分析 · 新连接的建立
2018/02/08 MySQL · 引擎特性 · INFORMATION_SCHEMA系统表的实现
2018/02/09 MySQL · 最佳实践 · 在线收缩UNDO Tablespace
2018/02/10 PgSQL · 应用案例 · 自定义并行聚合函数的原理与实践
2018/01/01 MySQL · 引擎特性 · Group Replication内核解析之二
2018/01/02 MySQL · 引擎特性 · MySQL内核对读写分离的支持
2018/01/03 PgSQL · 内核解析 · 同步流复制实现分析
2018/01/04 MySQL · 捉虫动态 · UK 包含 NULL 值备库延迟分析
2018/01/05 MySQL · 捉虫动态 · Error in munmap() “Cannot allocate memory”
2018/01/06 MSSQL · 最佳实践 · 数据库备份链
2018/01/07 MySQL · 捉虫动态 · 字符集相关变量介绍及binlog中字符集相关缺陷分析
2018/01/08 PgSQL · 应用案例 · 传统分库分表(sharding)的缺陷与破解之法
2018/01/09 MySQL · MyRocks · MyRocks参数介绍
2018/01/10 PgSQL · 应用案例 · 惊天性能!单RDS PostgreSQL实例支撑 2000亿
2017/12/01 MySQL · 引擎特性 · InnoDB 事务系统
2017/12/02 MySQL · 引擎特性 · Innodb 锁子系统浅析
2017/12/03 MySQL · 特性分析 · LOGICAL_CLOCK 并行复制原理及实现分析
2017/12/04 PgSQL · 源码分析 · AutoVacuum机制之autovacuum launcher
2017/12/05 MSSQL · 最佳实践 · SQL Server备份策略
2017/12/06 MySQL · 最佳实践 · 一个“异常”的索引选择
2017/12/07 PgSQL · 内核开发 · 利用一致性快照迁移你的数据
2017/12/08 PgSQL · 应用案例 · 手机行业分析、决策系统设计-实时圈选、透视、估算
2017/12/09 MySQL · 最佳实践 · 如何索引JSON字段
2017/12/10 MySQL · myrocks · 相关tools介绍
2017/11/01 MySQL · 数据恢复 · undrop-for-innodb
2017/11/02 MySQL · 引擎特性 · DROP TABLE之binlog解析
2017/11/03 MSSQL · 最佳实践 · SQL Server三种常见备份
2017/11/04 MySQL · 最佳实践 · 什么时候该升级内存规格
2017/11/05 MySQL · 源码分析 · InnoDB LRU List刷脏改进之路
2017/11/06 MySQL · 特性分析 · MySQL 5.7 外部XA Replication实现及缺陷分析
2017/11/07 PgSQL · 最佳实践 · 双十一数据运营平台订单Feed数据洪流实时分析方案
2017/11/08 MySQL · 引擎特性 · TokuDB hot-index机制
2017/11/09 MySQL · 最佳实践 · 分区表基本类型
2017/11/10 PgSQL · 应用案例 · 流式计算与异步消息在阿里实时订单监测中的应用
2017/10/01 PgSQL · 特性分析 · MVCC机制浅析
2017/10/02 MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取
2017/10/03 MySQL · 引擎特性 · InnoDB mini transation
2017/10/04 MySQL · 特性介绍 · 一些流行引擎存储格式简介
2017/10/05 MSSQL · 架构分析 · 从SQL Server 2017发布看SQL Server架构的演变
2017/10/06 MySQL · 引擎介绍 · Sphinx源码剖析(三)
2017/10/07 PgSQL · 内核开发 · 如何管理你的 PostgreSQL 插件
2017/10/08 MySQL · 特性分析 · 数据一样checksum不一样
2017/10/09 PgSQL · 应用案例 · 经营、销售分析系统DB设计之共享充电宝
2017/10/10 MySQL · 捉虫动态 · 信号处理机制分析
2017/09/01 POLARDB · 新品介绍 · 深入了解阿里云新一代产品 POLARDB
2017/09/02 HybridDB · 最佳实践 · 阿里云数据库PetaData
2017/09/03 MySQL · 捉虫动态 · show binary logs 灵异事件
2017/09/04 MySQL · myrocks · myrocks之Bloom filter
2017/09/05 MySQL · 特性分析 · 浅谈 MySQL 5.7 XA 事务改进
2017/09/06 MySQL · 特性分析 · 利用gdb跟踪MDL加锁过程
2017/09/07 MySQL · 源码分析 · Innodb 引擎Redo日志存储格式简介
2017/09/08 MSSQL · 应用案例 · 日志表设计优化与实现
2017/09/09 PgSQL · 应用案例 · 海量用户实时定位和圈人-团圆社会公益系统
2017/09/10 MySQL · 源码分析 · 一条insert语句的执行过程
2017/08/01 MySQL · 引擎特性 · Group Replication内核解析
2017/08/02 PgSQL · 特性介绍 · 列存元数据扫描介绍
2017/08/03 MySQL · 源码分析 · MySQL replication partial transaction
2017/08/04 MySQL · 特性分析 · 到底是谁执行了FTWL
2017/08/05 MySQL · 源码分析 · mysql认证阶段漫游
2017/08/06 MySQL · 源码分析 · 内存分配机制
2017/08/07 PgSQL · 源码分析 · PG 优化器中的pathkey与索引在排序时的使用
2017/08/08 MSSQL· 实现分析 · Extend Event日志文件的分析方法
2017/08/09 MySQL · 源码分析 · SHUTDOWN过程
2017/08/10 PgSQL · 应用案例 · HDB for PG特性(数据排盘与任意列高效率过滤)
2017/07/01 MySQL · 引擎特性 · InnoDB崩溃恢复
2017/07/02 PgSQL · 应用案例 · 阿里云RDS金融数据库(三节点版) - 背景篇
2017/07/03 AliSQL · 特性介绍 · 支持 Invisible Indexes
2017/07/04 TokuDB · 引擎特性 · HybridDB for MySQL高压缩引擎TokuDB 揭秘
2017/07/05 MySQL · myrocks · myrocks写入分析
2017/07/06 MSSQL · 实现分析 · Extend Event实现审计日志对SQL Server性能影响
2017/07/07 HybridDB · 源码分析 · MemoryContext 内存管理和内存异常分析
2017/07/08 MySQL · 实现分析 · HybridDB for MySQL 数据压缩
2017/07/09 PgSQL · 最佳实践 · CPU满问题处理
2017/07/10 MySQL · 源码分析 · InnoDB 异步IO工作流程
2017/06/01 MySQL · 源码分析 · Tokudb序列化和反序列化过程
2017/06/02 PgSQL · 应用案例 · HTAP视角,数据与计算的生态融合
2017/06/03 MySQL · 引擎特性 · 从节点可更新机制
2017/06/04 PgSQL · 特性分析 · 数据库崩溃恢复(下)
2017/06/05 MySQL · 捉虫动态 · InnoDB crash
2017/06/06 MSSQL · 实现分析 · SQL Server实现审计日志的方案探索
2017/06/07 MySQL · 源码分析 · InnoDB Repeatable Read隔离级别之大不同
2017/06/08 MySQL · myrocks · MyRocks之memtable切换与刷盘
2017/06/09 PgSQL · 最佳实践 · 云上的数据迁移
2017/06/10 MySQL · 社区新闻 · MariaDB 10.2 GA
2017/05/01 MySQL · 引擎特性 · InnoDB Buffer Pool
2017/05/02 AliSQL · 特性介绍 · 动态加字段
2017/05/03 PgSQL · 特性分析 · 数据库崩溃恢复(上)
2017/05/04 MySQL · 答疑解惑 · MySQL 的那些网络超时错误
2017/05/05 HybridDB · 最佳实践 · HybridDB 数据合并的方法与原理
2017/05/06 MSSQL · 应用案例 · 构建死锁自动收集系统
2017/05/07 PostgreSQL · 实现分析 · PostgreSQL 10.0 并行查询和外部表的结合
2017/05/08 RocksDB · 特性介绍 · HashLinkList 内存表
2017/05/09 MySQL · myrocks · fast data load
2017/05/10 PgSQL · 应用案例 · “写入、共享、存储、计算” 最佳实践
2017/04/01 MySQL · 源码分析 · MySQL 半同步复制数据一致性分析
2017/04/02 MYSQL · 新特性 · MySQL 8.0对Parser所做的改进
2017/04/03 MySQL · 引擎介绍 · Sphinx源码剖析(二)
2017/04/04 PgSQL · 特性分析 · checkpoint机制浅析
2017/04/05 MySQL · 特性分析 · common table expression
2017/04/06 PgSQL · 应用案例 · 逻辑订阅给业务架构带来了什么?
2017/04/07 MSSQL · 应用案例 · 基于内存优化表的列存储索引分析Web Access Log
2017/04/08 TokuDB · 捉虫动态 · MRR 导致查询失败
2017/04/09 HybridDB · 稳定性 · HybridDB如何优雅的处理Out Of Memery问题
2017/04/10 MySQL · 捉虫动态 · 5.7 mysql_upgrade 元数据锁等待
2017/03/01 MySQL · 引擎特性 · InnoDB IO子系统
2017/03/02 PgSQL · 特性分析 · Write-Ahead Logging机制浅析
2017/03/03 MySQL · 性能优化 · MySQL常见SQL错误用法
2017/03/04 MSSQL · 特性分析 · 列存储技术做实时分析
2017/03/05 MySQL · 新特性分析 · 5.7中Derived table变形记
2017/03/06 MySQL · 实现分析 · 对字符集和字符序支持的实现
2017/03/07 MySQL · 源码分析 · MySQL BINLOG半同步复制数据安全性分析
2017/03/08 HybridDB · 性能优化 · Count Distinct的几种实现方式
2017/03/09 PgSQL · 应用案例 · PostgreSQL OLAP加速技术之向量计算
2017/03/10 MySQL · myrocks · myrocks监控信息
2017/02/01 AliSQL · 开源 · Sequence Engine
2017/02/02 MySQL · myrocks · myrocks之备份恢复
2017/02/03 MySQL · 挖坑 · LOCK_active_mi/LOCK_msp_map 优化思路
2017/02/04 MySQL · 源码分析 · 词法分析及其性能优化
2017/02/05 SQL优化 · 经典案例 · 索引篇
2017/02/06 MySQL · 新特性分析 · CTE执行过程与实现原理
2017/02/07 PgSQL · 源码分析 · PG优化器物理查询优化
2017/02/08 SQL Server · 特性介绍 · 聚集列存储索引
2017/02/09 PgSQL · 应用案例 · 聚集存储 与 BRIN索引
2017/02/10 PgSQL · 应用案例 · GIN索引在任意组合查询中的应用
2017/01/01 MySQL · 引擎特性 · InnoDB 同步机制
2017/01/02 MySQL · myrocks · myrocks index condition pushdown
2017/01/03 PgSQL · 案例分享 · PostgreSQL+HybridDB解决企业TP+AP混合需求
2017/01/04 MongoDB · 特性分析 · 网络性能优化
2017/01/05 MySQL · 捉虫动态 · event_scheduler 慢日志记错
2017/01/06 PgSQL · 引擎介绍 · 向量化执行引擎简介
2017/01/07 SQL Server · 特性分析 · 2012列存储索引技术
2017/01/08 PgSQL · 乱入拜年 · 小鸡吉吉和小象Pi吉(PostgreSQL)的鸡年传奇
2017/01/09 MySQL · 特性分析 · 5.7 error log 时区和系统时区不同
2017/01/10 TokuDB · 源码分析 · 一条query语句的执行过程
2016/12/01 MySQL · 引擎特性 · Infobright 列存数据库
2016/12/02 MySQL · myrocks · myrocks统计信息
2016/12/03 SQL Server · 特性介绍 · 统计信息
2016/12/04 PgSQL · 案例分享 · 从春运抢火车票思考数据库设计
2016/12/05 HybridDB · 最佳实践 · OLAP和OLTP一体化打造
2016/12/06 TokuDB · 特性分析 · 导入数据大杀器:Loader
2016/12/07 PgSQL · 案例分享 · PostgreSQL 性能诊断指南
2016/12/08 MySQL · 捉虫动态 · 5.6中ORDER BY + LIMIT 错选执行计划
2016/12/09 Redis · 最佳实践 · 阿里云Redis助力双11业务
2016/12/10 PgSQL · 案例分享 · 递归收敛优化
2016/11/01 PgSQL · 特性分析 · 金融级同步多副本分级配置方法
2016/11/02 MySQL · myrocks · myrocks之事务处理
2016/11/03 MySQL · TokuDB · rbtree block allocator
2016/11/04 MySQL · 引擎特性 · Column Compression浅析
2016/11/05 MySQL · 引擎介绍 · Sphinx源码剖析(一)
2016/11/06 PgSQL · 特性分析 · PostgreSQL 9.6 如何把你的机器掏空
2016/11/07 PgSQL · 特性分析 · PostgreSQL 9.6 让多核并行起来
2016/11/08 MSSQL · 最佳实战 · 巧用COLUMNS_UPDATED获取数据变更
2016/11/09 PgSQL · GIS应用 · 物流, 动态路径规划
2016/11/10 PgSQL · 特性分析· JIT 在数据仓库中的应用价值
2016/10/01 AliSQL · 社区动态 · 关于开源之后评论的评论
2016/10/02 MySQL · 社区见闻 · Oracle Open World 2016 见闻
2016/10/03 MySQL · 社区见闻 · Percona Live 2016 见闻
2016/10/04 MySQL · 社区见闻 · MariaDB Developer Meeting 2016
2016/10/05 MySQL · myrocks · data dictionary 分析
2016/10/06 MySQL · 源码分析 · 无法revoke单库或单表权限
2016/10/07 PgSQL · 代码浅析 · PostgreSQL 可靠性分析
2016/10/08 PgSQL · 代码浅析 · PostgreSQL 9.6 聚合OP复用的优化分析
2016/10/09 MySQL · 特性分析 · 直方图的实现与分析
2016/10/10 SQL Server · 最佳实践 · 参数嗅探问题
2016/09/01 MySQL · 社区贡献 · AliSQL那些事儿
2016/09/02 PetaData · 架构体系 · PetaData第二代低成本存储体系
2016/09/03 MySQL · 社区动态 · MariaDB 10.2 前瞻
2016/09/04 MySQL · 特性分析 · 执行计划缓存设计与实现
2016/09/05 PgSQL · 最佳实践 · pg_rman源码浅析与使用
2016/09/06 MySQL · 捉虫状态 · bug分析两例
2016/09/07 PgSQL · 源码分析 · PG优化器浅析
2016/09/08 MongoDB · 特性分析· Sharding原理与应用
2016/09/09 PgSQL · 源码分析 · PG中的无锁算法和原子操作应用一则
2016/09/10 SQLServer · 最佳实践 · TEMPDB的设计
2016/08/01 MySQL · 特性分析 ·MySQL 5.7新特性系列四
2016/08/02 PgSQL · PostgreSQL 逻辑流复制技术的秘密
2016/08/03 MySQL · 特性分析 · MyRocks简介
2016/08/04 GPDB · 特性分析· Greenplum 备份架构
2016/08/05 SQLServer · 最佳实践 · RDS for SQLServer 2012权限限制提升与改善
2016/08/06 TokuDB · 引擎特性 · REPLACE 语句优化
2016/08/07 MySQL · 专家投稿 · InnoDB物理行中null值的存储的推断与验证
2016/08/08 PgSQL · 实战经验 · 旋转门压缩算法在PostgreSQL中的实现
2016/08/09 MySQL · 源码分析 · Query Cache并发处理
2016/08/10 PgSQL · 源码分析· pg_dump分析
2016/07/01 MySQL · 特性分析 ·MySQL 5.7新特性系列三
2016/07/02 MySQL · 特性分析 · 5.7 代价模型浅析
2016/07/03 PgSQL · 实战经验 · 分组TOP性能提升44倍
2016/07/04 MySQL · 源码分析 · 网络通信模块浅析
2016/07/05 MongoDB · 特性分析 · 索引原理
2016/07/06 SQLServer · 特性分析 · XML与JSON应用比较
2016/07/07 MySQL · 最佳实战 · 审计日志实用案例分析
2016/07/08 MySQL · 性能优化 · 条件下推到物化表
2016/07/09 MySQL · 源码分析 · Query Cache内部剖析
2016/07/10 MySQL · 捉虫动态 · 备库1206错误问题说明
2016/06/01 MySQL · 特性分析 · innodb 锁分裂继承与迁移
2016/06/02 MySQL · 特性分析 ·MySQL 5.7新特性系列二
2016/06/03 PgSQL · 实战经验 · 如何预测Freeze IO风暴
2016/06/04 GPDB · 特性分析· Filespace和Tablespace
2016/06/05 MariaDB · 新特性 · 窗口函数
2016/06/06 MySQL · TokuDB · checkpoint过程
2016/06/07 MySQL · 特性分析 · 内部临时表
2016/06/08 MySQL · 最佳实践 · 空间优化
2016/06/09 SQLServer · 最佳实践 · 数据库实现大容量插入的几种方式
2016/06/10 MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
2016/05/01 MySQL · 引擎特性 · 基于InnoDB的物理复制实现
2016/05/02 MySQL · 特性分析 · MySQL 5.7新特性系列一
2016/05/03 PostgreSQL · 特性分析 · 逻辑结构和权限体系
2016/05/04 MySQL · 特性分析 · innodb buffer pool相关特性
2016/05/05 PG&GP · 特性分析 · 外部数据导入接口实现分析
2016/05/06 SQLServer · 最佳实践 · 透明数据加密在SQLServer的应用
2016/05/07 MySQL · TokuDB · 日志子系统和崩溃恢复过程
2016/05/08 MongoDB · 特性分析 · Sharded cluster架构原理
2016/05/09 PostgreSQL · 特性分析 · 统计信息计算方法
2016/05/10 MySQL · 捉虫动态 · left-join多表导致crash
2016/04/01 MySQL · 参数故事 · innodb_additional_mem_pool_size
2016/04/02 GPDB · 特性分析 · Segment事务一致性与异常处理
2016/04/03 GPDB · 特性分析 · Segment 修复指南
2016/04/04 MySQL · 捉虫动态 · 并行复制外键约束问题二
2016/04/05 PgSQL · 性能优化 · 如何潇洒的处理每天上百TB的数据增量
2016/04/06 Memcached · 最佳实践 · 热点 Key 问题解决方案
2016/04/07 MongoDB · 最佳实践 · 短连接Auth性能优化
2016/04/08 MySQL · 最佳实践 · RDS 只读实例延迟分析
2016/04/09 MySQL · TokuDB · TokuDB索引结构–Fractal Tree
2016/04/10 MySQL · TokuDB · Savepoint漫谈
2016/03/01 MySQL · TokuDB · 事务子系统和 MVCC 实现
2016/03/02 MongoDB · 特性分析 · MMAPv1 存储引擎原理
2016/03/03 PgSQL · 源码分析 · 优化器逻辑推理
2016/03/04 SQLServer · BUG分析 · Agent 链接泄露分析
2016/03/05 Redis · 特性分析 · AOF Rewrite 分析
2016/03/06 MySQL · BUG分析 · Rename table 死锁分析
2016/03/07 MySQL · 物理备份 · Percona XtraBackup 备份原理
2016/03/08 GPDB · 特性分析· GreenPlum FTS 机制
2016/03/09 MySQL · 答疑解惑 · 备库Seconds_Behind_Master计算
2016/03/10 MySQL · 答疑解惑 · MySQL 锁问题最佳实践
2016/02/01 MySQL · 引擎特性 · InnoDB 文件系统之文件物理结构
2016/02/02 MySQL · 引擎特性 · InnoDB 文件系统之IO系统和内存管理
2016/02/03 MySQL · 特性分析 · InnoDB transaction history
2016/02/04 PgSQL · 会议见闻 · PgConf.Russia 2016 大会总结
2016/02/05 PgSQL · 答疑解惑 · PostgreSQL 9.6 并行查询实现分析
2016/02/06 MySQL · TokuDB · TokuDB之黑科技工具
2016/02/07 PgSQL · 性能优化 · PostgreSQL TPC-C极限优化玩法
2016/02/08 MariaDB · 版本特性 · MariaDB 的 GTID 介绍
2016/02/09 MySQL · 特性分析 · 线程池
2016/02/10 MySQL · 答疑解惑 · mysqldump tips 两则
2016/01/01 MySQL · 引擎特性 · InnoDB 事务锁系统简介
2016/01/02 GPDB · 特性分析· GreenPlum Primary/Mirror 同步机制
2016/01/03 MySQL · 专家投稿 · MySQL5.7 的 JSON 实现
2016/01/04 MySQL · 特性分析 · 优化器 MRR & BKA
2016/01/05 MySQL · 答疑解惑 · 物理备份死锁分析
2016/01/06 MySQL · TokuDB · Cachetable 的工作线程和线程池
2016/01/07 MySQL · 特性分析 · drop table的优化
2016/01/08 MySQL · 答疑解惑 · GTID不一致分析
2016/01/09 PgSQL · 特性分析 · Plan Hint
2016/01/10 MariaDB · 社区动态 · MariaDB on Power8 (下)
2015/12/01 MySQL · 引擎特性 · InnoDB 事务子系统介绍
2015/12/02 PgSQL · 特性介绍 · 全文搜索介绍
2015/12/03 MongoDB · 捉虫动态 · Kill Hang问题排查记录
2015/12/04 MySQL · 参数优化 ·RDS MySQL参数调优最佳实践
2015/12/05 PgSQL · 特性分析 · 备库激活过程分析
2015/12/06 MySQL · TokuDB · 让Hot Backup更完美
2015/12/07 PgSQL · 答疑解惑 · 表膨胀
2015/12/08 MySQL · 特性分析 · Index Condition Pushdown (ICP)
2015/12/09 MariaDB · 社区动态 · MariaDB on Power8
2015/12/10 MySQL · 特性分析 · 企业版特性一览
2015/11/01 MySQL · 社区见闻 · OOW 2015 总结 MySQL 篇
2015/11/02 MySQL · 特性分析 · Statement Digest
2015/11/03 PgSQL · 答疑解惑 · PostgreSQL 用户组权限管理
2015/11/04 MySQL · 特性分析 · MDL 实现分析
2015/11/05 PgSQL · 特性分析 · full page write 机制
2015/11/06 MySQL · 捉虫动态 · MySQL 外键异常分析
2015/11/07 MySQL · 答疑解惑 · MySQL 优化器 range 的代价计算
2015/11/08 MySQL · 捉虫动态 · ORDER/GROUP BY 导致 mysqld crash
2015/11/09 MySQL · TokuDB · TokuDB 中的行锁
2015/11/10 MySQL · 捉虫动态 · order by limit 造成优化器选择索引错误
2015/10/01 MySQL · 引擎特性 · InnoDB 全文索引简介
2015/10/02 MySQL · 特性分析 · 跟踪Metadata lock
2015/10/03 MySQL · 答疑解惑 · 索引过滤性太差引起CPU飙高分析
2015/10/04 PgSQL · 特性分析 · PG主备流复制机制
2015/10/05 MySQL · 捉虫动态 · start slave crash 诊断分析
2015/10/06 MySQL · 捉虫动态 · 删除索引导致表无法打开
2015/10/07 PgSQL · 特性分析 · PostgreSQL Aurora方案与DEMO
2015/10/08 TokuDB · 捉虫动态 · CREATE DATABASE 导致crash问题
2015/10/09 PgSQL · 特性分析 · pg_receivexlog工具解析
2015/10/10 MySQL · 特性分析 · MySQL权限存储与管理
2015/09/01 MySQL · 引擎特性 · InnoDB Adaptive hash index介绍
2015/09/02 PgSQL · 特性分析 · clog异步提交一致性、原子操作与fsync
2015/09/03 MySQL · 捉虫动态 · BUG 几例
2015/09/04 PgSQL · 答疑解惑 · 诡异的函数返回值
2015/09/05 MySQL · 捉虫动态 · 建表过程中crash造成重建表失败
2015/09/06 PgSQL · 特性分析 · 谈谈checkpoint的调度
2015/09/07 MySQL · 特性分析 · 5.6 并行复制恢复实现
2015/09/08 MySQL · 备库优化 · relay fetch 备库优化
2015/09/09 MySQL · 特性分析 · 5.6并行复制事件分发机制
2015/09/10 MySQL · TokuDB · 文件目录谈
2015/08/01 MySQL · 社区动态 · InnoDB Page Compression
2015/08/02 PgSQL · 答疑解惑 · RDS中的PostgreSQL备库延迟原因分析
2015/08/03 MySQL · 社区动态 · MySQL5.6.26 Release Note解读
2015/08/04 PgSQL · 捉虫动态 · 执行大SQL语句提示无效的内存申请大小
2015/08/05 MySQL · 社区动态 · MariaDB InnoDB表空间碎片整理
2015/08/06 PgSQL · 答疑解惑 · 归档进程cp命令的core文件追查
2015/08/07 MySQL · 答疑解惑 · open file limits
2015/08/08 MySQL · TokuDB · 疯狂的 filenum++
2015/08/09 MySQL · 功能分析 · 5.6 并行复制实现分析
2015/08/10 MySQL · 功能分析 · MySQL表定义缓存
2015/07/01 MySQL · 引擎特性 · Innodb change buffer介绍
2015/07/02 MySQL · TokuDB · TokuDB Checkpoint机制
2015/07/03 PgSQL · 特性分析 · 时间线解析
2015/07/04 PgSQL · 功能分析 · PostGIS 在 O2O应用中的优势
2015/07/05 MySQL · 引擎特性 · InnoDB index lock前世今生
2015/07/06 MySQL · 社区动态 · MySQL内存分配支持NUMA
2015/07/07 MySQL · 答疑解惑 · 外键删除bug分析
2015/07/08 MySQL · 引擎特性 · MySQL logical read-ahead
2015/07/09 MySQL · 功能介绍 · binlog拉取速度的控制
2015/07/10 MySQL · 答疑解惑 · 浮点型的显示问题
2015/06/01 MySQL · 引擎特性 · InnoDB 崩溃恢复过程
2015/06/02 MySQL · 捉虫动态 · 唯一键约束失效
2015/06/03 MySQL · 捉虫动态 · ALTER IGNORE TABLE导致主备不一致
2015/06/04 MySQL · 答疑解惑 · MySQL Sort 分页
2015/06/05 MySQL · 答疑解惑 · binlog event 中的 error code
2015/06/06 PgSQL · 功能分析 · Listen/Notify 功能
2015/06/07 MySQL · 捉虫动态 · 任性的 normal shutdown
2015/06/08 PgSQL · 追根究底 · WAL日志空间的意外增长
2015/06/09 MySQL · 社区动态 · MariaDB Role 体系
2015/06/10 MySQL · TokuDB · TokuDB数据文件大小计算
2015/05/01 MySQL · 引擎特性 · InnoDB redo log漫游
2015/05/02 MySQL · 专家投稿 · MySQL数据库SYS CPU高的可能性分析
2015/05/03 MySQL · 捉虫动态 · 5.6 与 5.5 InnoDB 不兼容导致 crash
2015/05/04 MySQL · 答疑解惑 · InnoDB 预读 VS Oracle 多块读
2015/05/05 PgSQL · 社区动态 · 9.5 新功能BRIN索引
2015/05/06 MySQL · 捉虫动态 · MySQL DDL BUG
2015/05/07 MySQL · 答疑解惑 · set names 都做了什么
2015/05/08 MySQL · 捉虫动态 · 临时表操作导致主备不一致
2015/05/09 TokuDB · 引擎特性 · zstd压缩算法
2015/05/10 MySQL · 答疑解惑 · binlog 位点刷新策略
2015/04/01 MySQL · 引擎特性 · InnoDB undo log 漫游
2015/04/02 TokuDB · 产品新闻 · RDS TokuDB小手册
2015/04/03 TokuDB · 特性分析 · 行锁(row-lock)与区间锁(range-lock)
2015/04/04 PgSQL · 社区动态 · 说一说PgSQL 9.4.1中的那些安全补丁
2015/04/05 MySQL · 捉虫动态 · 连接断开导致XA事务丢失
2015/04/06 MySQL · 捉虫动态 · GTID下slave_net_timeout值太小问题
2015/04/07 MySQL · 捉虫动态 · Relay log 中 GTID group 完整性检测
2015/04/08 MySQL · 答疑释惑 · UPDATE交换列单表和多表的区别
2015/04/09 MySQL · 捉虫动态 · 删被引用索引导致crash
2015/04/10 MySQL · 答疑释惑 · GTID下auto_position=0时数据不一致
2015/03/01 MySQL · 答疑释惑· 并发Replace into导致的死锁分析
2015/03/02 MySQL · 性能优化· 5.7.6 InnoDB page flush 优化
2015/03/03 MySQL · 捉虫动态· pid file丢失问题分析
2015/03/04 MySQL · 答疑释惑· using filesort VS using temporary
2015/03/05 MySQL · 优化限制· MySQL index_condition_pushdown
2015/03/06 MySQL · 捉虫动态·DROP DATABASE外键约束的GTID BUG
2015/03/07 MySQL · 答疑释惑· lower_case_table_names 使用问题
2015/03/08 PgSQL · 特性分析· Logical Decoding探索
2015/03/09 PgSQL · 特性分析· jsonb类型解析
2015/03/10 TokuDB ·引擎机制· TokuDB线程池
2015/02/01 MySQL · 性能优化· InnoDB buffer pool flush策略漫谈
2015/02/02 MySQL · 社区动态· 5.6.23 InnoDB相关Bugfix
2015/02/03 PgSQL · 特性分析· Replication Slot
2015/02/04 PgSQL · 特性分析· pg_prewarm
2015/02/05 MySQL · 答疑释惑· InnoDB丢失自增值
2015/02/06 MySQL · 答疑释惑· 5.5 和 5.6 时间类型兼容问题
2015/02/07 MySQL · 捉虫动态· 变量修改导致binlog错误
2015/02/08 MariaDB · 特性分析· 表/表空间加密
2015/02/09 MariaDB · 特性分析· Per-query variables
2015/02/10 TokuDB · 特性分析· 日志详解
2015/01/01 MySQL · 性能优化· Group Commit优化
2015/01/02 MySQL · 新增特性· DDL fast fail
2015/01/03 MySQL · 性能优化· 启用GTID场景的性能问题及优化
2015/01/04 MySQL · 捉虫动态· InnoDB自增列重复值问题
2015/01/05 MySQL · 优化改进· 复制性能改进过程
2015/01/06 MySQL · 谈古论今· key分区算法演变分析
2015/01/07 MySQL · 捉虫动态· mysql client crash一例
2015/01/08 MySQL · 捉虫动态· 设置 gtid_purged 破坏AUTO_POSITION复制协议
2015/01/09 MySQL · 捉虫动态· replicate filter 和 GTID 一起使用的问题
2015/01/10 TokuDB·特性分析· Optimize Table
2014/12/01 MySQL · 性能优化 · 5.7 Innodb事务系统
2014/12/02 MySQL · 踩过的坑 · 5.6 GTID 和存储引擎那会事
2014/12/03 MySQL · 性能优化 · thread pool 原理分析
2014/12/04 MySQL · 性能优化 · 并行复制外建约束问题
2014/12/05 MySQL · 答疑释惑 · binlog event有序性
2014/12/06 MySQL · 答疑释惑 · server_id为0的Rotate
2014/12/07 MySQL · 性能优化 · Bulk Load for CREATE INDEX
2014/12/08 MySQL · 捉虫动态·Opened tables block read only
2014/12/09 MySQL· 优化改进· GTID启动优化
2014/12/10 TokuDB · TokuDB · Binary Log Group Commit with TokuDB
2014/11/01 MySQL · 捉虫动态 · OPTIMIZE 不存在的表
2014/11/02 MySQL · 捉虫动态 · SIGHUP 导致 binlog 写错
2014/11/03 MySQL · 5.7改进 · Recovery改进
2014/11/04 MySQL · 5.7特性 · 高可用支持
2014/11/05 MySQL · 5.7优化 · Metadata Lock子系统的优化
2014/11/06 MySQL · 5.7特性 · 在线Truncate undo log 表空间
2014/11/07 MySQL · 性能优化 · hash_scan 算法的实现解析
2014/11/08 TokuDB · 版本优化 · 7.5.0
2014/11/09 TokuDB · 引擎特性 · FAST UPDATES
2014/11/10 MariaDB · 性能优化 · filesort with small LIMIT optimization
2014/10/01 MySQL · 5.7重构 · Optimizer Cost Model
2014/10/02 MySQL · 系统限制 · text字段数
2014/10/03 MySQL · 捉虫动态 · binlog重放失败
2014/10/04 MySQL · 捉虫动态 · 从库OOM
2014/10/05 MySQL · 捉虫动态 · 崩溃恢复失败
2014/10/06 MySQL · 功能改进 · InnoDB Warmup特性
2014/10/07 MySQL · 文件结构 · 告别frm文件
2014/10/08 MariaDB · 新鲜特性 · ANALYZE statement 语法
2014/10/09 TokuDB · 主备复制 · Read Free Replication
2014/10/10 TokuDB · 引擎特性 · 压缩
2014/09/01 MySQL · 捉虫动态 · GTID 和 DELAYED
2014/09/02 MySQL · 限制改进 · GTID和升级
2014/09/03 MySQL · 捉虫动态 · GTID 和 binlog_checksum
2014/09/04 MySQL · 引擎差异·create_time in status
2014/09/05 MySQL · 参数故事 · thread_concurrency
2014/09/06 MySQL · 捉虫动态 · auto_increment
2014/09/07 MariaDB · 性能优化 · Extended Keys
2014/09/08 MariaDB · 主备复制 · CREATE OR REPLACE
2014/09/09 TokuDB · 参数故事 · 数据安全和性能
2014/09/10 TokuDB · HA方案 · TokuDB热备
2014/08/01 MySQL · 参数故事 · timed_mutexes
2014/08/02 MySQL · 参数故事 · innodb_flush_log_at_trx_commit
2014/08/03 MySQL · 捉虫动态 · Count(Distinct) ERROR
2014/08/04 MySQL · 捉虫动态 · mysqldump BUFFER OVERFLOW
2014/08/05 MySQL · 捉虫动态 · long semaphore waits
2014/08/06 MariaDB · 分支特性 · 支持大于16K的InnoDB Page Size
2014/08/07 MariaDB · 分支特性 · FusionIO特性支持
2014/08/08 TokuDB · 性能优化 · Bulk Fetch
2014/08/09 TokuDB · 数据结构 · Fractal-Trees与LSM-Trees对比
2014/08/10 TokuDB·社区八卦·TokuDB团队
首先需要新建一个 maven 的项目,然后再使用这个项目访问 neo4j。
参考: https://blog.csdn.net/YF_Li123/article/details/79953731
打开 IntelliJ IDEA, Create New Project,
左侧选择 Maven, 右侧不用勾选 Create from archetype, 然后点击 next,
输入 GroupId 和 ArtifactId, Version 默认即可,然后点击 next,
接着 finish,
最后,在 src->main 下面新建 main 函数的类,就可以了。
在 pom.xml 添加如下:
1 | <dependencies> |
在 main 函数中,import org.neo4j.driver.v1.*
使用方法:
1 | Driver driver = GraphDatabase.driver( "bolt://localhost:7687", AuthTokens.basic( "neo4j", "123456" ) ); |
该 demo 可以在 github 上下载: https://github.com/cighao/neo4j-java-driver-usage
]]>https://neo4j.com/docs/java-reference/current/extending-neo4j/
http://qinxuye.me/article/introduction-to-neo4j/
Spring Boot 配置 Neo4j: https://blog.csdn.net/wgangyiii/article/details/79139120
Neo4j 安装:
https://blog.csdn.net/wgangyiii/article/details/79150315
http://www.k6k4.com/blog/show/aaavurkwu1547605733514
https://neo4j.com/docs/operations-manual/3.4/reference/configuration-settings/
transaction logs: https://neo4j.com/docs/operations-manual/current/configuration/transaction-logs/
http://www.k6k4.com/circle/show/aakfimepl1547605663377
https://dengziming.github.io/tags/neo4j/
http://ju.outofmemory.cn/entry/306362
利用 IDEA 创建第一个hello world 的 mvn 项目,
https://blog.csdn.net/YF_Li123/article/details/79953731
Java 访问 neo4j
https://blog.csdn.net/qq_15783243/article/details/78091712
python driver 的地址:https://github.com/neo4j/neo4j-python-driver
需要安装 python 3 版本,然后安装 pip3, 通过 pip3 安装驱动可以把驱动安装到 python 3 对应的库。
安装驱动:
1 | pip3 install git+https://github.com/neo4j/neo4j-python-driver.git#egg=neo4j |
有可能会在运行时报错,
File “/usr/local/lib/python3.4/dist-packages/neobolt/direct.py”, line 123, in supports
return self.version_info() >= (3, 2)
TypeError: unorderable types: str() >= int()
定位到报错的文件,发现报错的是 direct.py
文件的 supports()
函数。报错的原因的类型不匹配,通过调试发现,self.version_info()
返回的是字符串数组 ('dev',)
, 运行 self.version_info() >= (3, 2)
显然就会报错。没有找到有效的解决办法。supports()
函数主要是进行版本检查的,不是核心业务代码,所以目前的解决办法是,直接在 supports()
函数的第一行添加 return True
, 默认版本检查通过。然后运行,发现没有报错。
示例:
1 | from neo4j import GraphDatabase |
main 函数在 CommunityEntryPoint
类中。
1 | public static void main( String[] args ) |
首先通过 ServerBootstrapper.start(new CommunityBootstrapper(), args)
进入到 ServerBootstrapper.start(Bootstrapper boot, String... argv)
方法, 在该方法的末尾通过 boot.start(args.homeDir(), args.configFile(), args.configOverrides())
调用进入到 ServerBootstrapper.start(File homeDir, Optional<File> configFile, Map<String, String> configOverrides)
, 在该方法的末尾通过
1 | server = createNeoServer(config, dependencies); |
启动。
通过 createNeoServer(config, dependencies)
会进入到,ServerBootstrapper.createNeoServer(Config config, GraphDatabaseDependencies dependencies)
, 在该函数的最后通过 createNeoServer(graphFactory, config, dependencies)
会进入到 CommunityBootstrapper.createNeoServer(GraphFactory graphFactory, Config config, GraphDatabaseDependencies dependencies)
, 该函数只有一个语句
1 | return new CommunityNeoServer(config, graphFactory, dependencies); |
最终是新建了一个 CommunityNeoServer
对象返回到了 ServerBootstrapper.start()
中, 并调用了 CommunityNeoServer
对象的 start()
方法,完成了 neo4j 的启动。
这样我们发现,整个启动的核心代码都在 CommunityNeoServer.start()
中,CommunityNeoServer
继承自 AbstractNeoServer
, 并且没有重写 AbstractNeoServer
的 start()
方法,所以启动的核心代码都在 AbstractNeoServer.start()
函数中。 AbstractNeoServer.start()
中只有一行代码:
1 | life.start(); |
这里的 life
是 AbstractNeoServer
类的一个变量,是 LifeSupport
类的一个实例。lift.start()
会跳去执行 LifeSupport.start()
方法。
(1) 打开虚拟机 Devices -> Install Guest Additions…(it’s like inserting a cd to cdrom drive)
(2) 在虚拟机中运行以下命令:
1 | sudo mkdir --p /media/cdrom |
可以在虚拟机窗口的下面选择调整大小。
https://segmentfault.com/a/1190000014523888
一不小心把 /usr 目录的权限设置成了普通的用户,导致 sudo 用不了,输入 sudo 提示:
sudo: /usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位
重启进入 recovery 模式。
recovery模式 –> 选择 root
进入命令行,执行:
1 | chown root:root /usr/bin/sudo |
reboot 重启。
不过还是建议把整个 usr 目录的所有者改成 root:
1 | chown -R root:root /usr |
从 https://github.com/filebench/filebench 安装 filebench 时,遇到 gcc: error: parser_lex.c: No such file or directory
Solution: sudo yum install flex
即可。
(1) brew install openssl
(2) open ~/.bash_profile
add:
1 | export PATH="/usr/local/opt/openssl/bin:$PATH" |
(3) source ~/.bash_profile
创建挂载目录: mkdir /home/chenhao/ramdisk
查看内存使用量: htop
分配内存并挂载: sudo mount -t tmpfs -o size=10240m ramdisk /home/chenhao/ramdisk
查看: df -h
修改 /etc/fstab
自动挂载: tmpfs /home/chenhao/ramdisk tmpfs rw,relatime,size=10G 0 0
1 | git clone https://github.com/intel/tbb.git |
Inside tbb/build will be two new folders, one for the release version and the other for the debug version. Those folders are named like “architecture_ldVersion_g++Version_kernelVersion”.
I recommend setting some variables, for example in the .bashrc file, like:
1 | TBB_INSTALL_DIR = $HOME/tbb |
Example
1 | // main.cpp |
1 | g++ main.cpp -I$TBB_INCLUDE -Wl,-rpath,$TBB_LIBRARY_RELEASE -L$TBB_LIBRARY_RELEASE -ltbb |
With -Wl,-rpath,$TBB_LIBRARY_RELEASE we are telling the dynamic linker where to find libtbb.so
Installation for Apple clang 5.1: [thanks to rwols for the info]
Instead of typing make, type make compiler=clang or make compiler=clang stdlib=libc++
(1) mysql 创建用户
用此命令进入mysql:mysql -u root mysql
查询用户: select Host,User,Password from mysql.user;
删除用户名为空的用户: delete from mysql.user where user='';
查看当前用户: SELECT CURRENT_USER();
reference: https://www.jianshu.com/p/d7b9c468f20d
命令:
1 | CREATE USER 'username'@'host' IDENTIFIED BY 'password'; |
username
:你将创建的用户名host
:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%password
:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
e.g.:
1 | CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; |
刷新用户权限: FLUSH PRIVILEGES;
(2) 创建数据库
创建: CREATE DATABASE linkdb
显示: show databases
(3) 授权
先要用 root 登陆: mysql -u root mysql
在选择数据库: use <database name>
在授权,最后刷新权限: FLUSH PRIVILEGES;
命令:
1 | GRANT privileges ON databasename.tablename TO 'username'@'host' |
privileges
:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALLdatabasename
:数据库名tablename
:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*
e.g.:
1 | GRANT SELECT, INSERT ON test.user TO 'pig'@'%'; |
下载源码并解压。
进入源码路径后运行: ./contrib/download_prerequisites
新建 build 目录: mkdir build
进入 build 目录后运行: ../configure –-prefix=path --enable-checking=release --enable-languages=c,c++ --disable-multilib
prefix 指定安装目录。
然后在 build 目录下 make & make install
.ssh
文件夹 和 authorized_keys
文件必须满足一定的权限才行。
1 | chmod 600 .ssh/authorized_keys |
查看 ulimit -n
设置 ulimit -n 65535
修改配置:
(1) 打开 /etc/security/limits.conf
添加 username hard nofile 1048576
(2) 打开 /etc/ssh/sshd_config
添加 UsePAM=yes
(3) 打开 /etc/pam.d/sshd
添加 session required pam_limits.so
如果无法生效,可以先切换到root用户,再切换回来
(1) 追加 default_hugepagesz=1G hugepagesz=1G 到 /etc/default/grub 里的变量 GRUB_CMDLINE_LINUX 中,
(2) 运行 grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
(3) reboot
echo off > /sys/devices/system/cpu/smt/control
echo 0 > /sys/devices/system/cpu/cpu1/online
lscpu
可以查看 CPU 的具体信息
参考:https://cloud.tencent.com/developer/article/1614039
替换为阿里源
1 | 查看 brew.git 当前源 |
重置为官方源
1 | 重置 brew.git 为官方源 |
打开 IDEA 官网 https://www.jetbrains.com/idea/ 下载源码
下载完成后解压到 /opt 下:
1 | sudo tar -zxvf ideaIU-2016.3.3-no-jdk.tar.gz -C /opt |
进入到源码目录: cd /opt/idea-xxx/bin
终端输入 ./idea.sh
进行安装。
社区版的不用激活。旗舰版的需要激活:
先修改 host 文件,添加: 0.0.0.0 account.jetbrains.com
0.0.0.0 www.jetbrains.com
然后使用使用激活码:
1 | K71U8DBPNE-eyJsaWNlbnNlSWQiOiJLNzFVOERCUE5FIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiR08iLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkNMIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJSU1UiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifV0sImhhc2giOiI4OTA4Mjg5LzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-Owt3/+LdCpedvF0eQ8635yYt0+ZLtCfIHOKzSrx5hBtbKGYRPFDrdgQAK6lJjexl2emLBcUq729K1+ukY9Js0nx1NH09l9Rw4c7k9wUksLl6RWx7Hcdcma1AHolfSp79NynSMZzQQLFohNyjD+dXfXM5GYd2OTHya0zYjTNMmAJuuRsapJMP9F1z7UTpMpLMxS/JaCWdyX6qIs+funJdPF7bjzYAQBvtbz+6SANBgN36gG1B2xHhccTn6WE8vagwwSNuM70egpahcTktoHxI7uS1JGN9gKAr6nbp+8DbFz3a2wd+XoF3nSJb/d2f/6zJR8yJF8AOyb30kwg3zf5cWw==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog== |
激活可以参考:https://blog.csdn.net/qq_35246620/article/details/80522720
https://www.douban.com/note/671690598/
https://guobinhit.blog.csdn.net/article/details/89040919
选择要安装 java 的位置,如 /usr/
目录下,新建java文件夹(mkdir java
)
下载 jdk 文件到 /usr/java
解压:tar -zxvf jdk-xxx.tar.gz
配置环境变量,打开 /etc/profile
,最后面添加如下内容:
1 | JAVA_HOME=/usr/java/jdk-xxxxx |
刷新环境变量:source /etc/profile
验证是否安装成功:java -version
下载源码 apache-maven-xxx-bin.tar.gz
解压: tar zxvf apache-maven-xxx-bin.tar.gz
移动: sudo mv apache-maven-xxx /opt/maven/
配置环境变量,在 /etc/profile
中添加:
1 | export M2_HOME=/opt/maven/apache-maven-xxx |
刷新环境变量: source /etc/profile
测试:mvn -version
参考:https://blog.csdn.net/wgangyiii/article/details/79150315
(1) 从 github 下载源码: https://github.com/neo4j/neo4j/
(2) 进入源码目录执行:mvn clean install
执行 mvn clean install
进行编译导包,如果只使用该命令,则会进行测试代码,是一个非常耗费时间的过程,所以推荐使用 mvn clean install -DskipTest
该命令的意思是不执行测试直接导包编译。使用 -DskipTests
表示不执行测试用例,但编译测试用例类生成相应的 class 文件至 target/test-classes下。使用 -Dmaven.test.skip=true
表示不执行测试用例,也不编译测试用例类。
经常会有一些奇怪的错误,尝试不同的安装命令:
1 | mvn clean install |
有些时候莫名其妙就有用了,说不出来为啥。
(3) 解压编译文件:
编译完成后进入 packaging/standalone/target
里面会有编译好的项目压缩包,名为 neo4j-community-3.5.4-SNAPSHOT-unix.tar.gz
和 neo4j-community-3.5.4-SNAPSHOT-windows.zip
,.tar 是面向 ubuntu 系统的,.zip是面向 windows 系统的,执行解压。
(4) 运行
进入解压后的文件夹,运行 bin/neo4j start
。
浏览器输入 http://localhost:7474 可以看到显示界面。
IDEA 中导入项目。main 函数在 community/server/src/main/java/org/neo4j/server
中的 CommunityEntryPoint
类中。
配置 application 运行参数:
1 | Main class: org.neo4j.server.CommunityEntryPoint |
该 main 函数需要两个参数,一个是 home-dir
, 这是存放数据库等文件的目录,可以自己设置一个文件夹。另一个是 config-dir
, 这个是配置文件所在的目录,默认的配置文件是 neo4j.conf, 上一步解压的 neo4j-community-3.5.4-SNAPSHOT 的 conf 目录下就有配置文件 neo4j.conf, 那么 config-dir
参数可以设置为 neo4j-community-3.5.4-SNAPSHOT/conf
。
配置文件的设置可以参考官方文档: https://neo4j.com/docs/operations-manual/current/reference/configuration-settings 和 https://neo4j.com/docs/operations-manual/current/configuration/
然后运行 community/server/src/main/java/org/neo4j/server
中的 CommunityEntryPoint
类
有可能会出现报错,提示某些符号找不到(主要是提示scala代码里声明的类找不到),但是在 neo4j 目录下运行 mvn clean
之后,再用 IDEA 编译运行,就不报错了。
有时候还会提示找不到某些类,解决办法,通过搜索找到该类所在的文件,发现该文件左(右)下角有个黄(红)色的j,如果是这样,那么在 file 里打开project structure 找到 modules,找到该文件对应的 modules 其中有个 sources,点击右边第一个×,然后点击下面的 add content root 按钮,重新选择该 modules 的代码。
]]>https://codeday.me/bug/20190119/550326.html
1 |
|
http://www.tlhiv.org/rast2vec/
https://image.online-convert.com/convert-to-eps
2.LaTeX下面如何画图
http://pgfplots.sourceforge.net/
http://pgfplots.sourceforge.net/gallery.html
http://pgfplots.sourceforge.net/pgfplots.pdf
3.pdf在线操作,合并、拆分、压缩等
https://www.ilovepdf.com/
https://smallpdf.com/cn/
4.设计表格自动生成 latex 代码
https://www.tablesgenerator.com/
https://blog.csdn.net/juechenyi/article/details/77116011
http://blog.sina.com.cn/s/blog_5e16f1770100u40t.html
https://www.posterpresentations.com/free-poster-templates.html
https://www.makesigns.com/SciPosters_Templates.aspx