分布式数据库和传统的share everying的数据库差别感觉还是非常的大,目前来说,一些锁、阻塞机制确实没有o做的全面和细致,此外,分布式数据库中类似于两阶段提交的特性,也可能会经常造成死锁、阻塞,在实时交易系统中灰造成比较严重的影响,那么目前是否有技术或者使用规范来避免这些问题呢?
分布式数据库较传统单机数据库或集中式数据库,是存在较多不同,因此在开发之处就有针对性的进行规避比较重要。这其中常见的点包括:事务大小、SQL复杂度、分布式事务、DDL变更等。基本的处理原则就是3B原则,即避免Big SQL、Big Transaction、Big Batch。此外,尽量减小分布式数据库中的变更,无论是架构上的(如扩缩容)、结构上的(如DDL)等。
收起分布式数据库由于多数采用 share nothing 的架构,跨节点事务的性能是一个很大的挑战。对于死锁检测问题,分布式数据库都有各自的方式,比如在 TiDB 中维护了全局的 wait-for-graph ,通过确保该图无环来避免死锁。在中间件类型的分布式数据库,一般是由计算节点来检测死锁。
另外 ,英特尔 ® 至强 ® 可扩展 处理器中的TSX (事务内存) 指令,也可以用于加速数据库的事务处理,减少锁的开销 。更多关于Intel TSX的信息 可以参考文档 : https://www.intel.com/content/dam/develop/external/us/en/documents/sf12-arcs004-100-393551.pdf