Archive: 2017

MySQL查询性能优化(二)

在发现查询效率不高时,首先就需要考虑查询语句的设计是否合理。如下将会介绍一些查询优化技巧,然后在介绍一些MySQL优化器内部的机制,并展示MySQL是如何执行查询的。最后探索查询优化的模式,以帮助MySQL更有效地执行查询。 优化数据访问查询性能低下的最基本原因是访问的数据太多了。因此大部分的性能低下查询都可以通过减少访问的数据量进行优化。减少数据访问量通常意味着访问了太多的行,但有时也可能是访问

MySQL查询性能优化(一)

MySQL查询性能的优化涉及多个方面,其中包括库表结构、建立合理的索引、设计合理的查询。库表结构包括如何设计表之间的关联、表字段的数据类型等。这需要依据具体的场景进行设计。如下我们从数据库的索引和查询语句的设计两个角度介绍如何提高MySQL查询性能。 数据库索引索引是存储引擎中用于快速找到记录的一种数据结构。索引有多种分类方式: 按照存储方式可以分为:聚簇索引和非聚簇索引 按照数据的唯一性可以

一致性hash

一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。 因此引入了一致性hash算法 把数据用hash函数(如MD5),映

A给B转100元

在单应用或者传统的强一致解决方案中,A账户转给B账户100元,一个简单的事务就可以保证但是现今互联网界,分布式系统和微服务架构盛行,一个简单操作,在服务端非常可能是由多个服务和数据库实例协同完成的。在互联网金融等一致性要求较高的场景下,多个独立操作之间的一致性问题显得格外棘手。基于水平扩容能力和成本考虑,传统的强一致的解决方案(e.g.单机事务)纷纷被抛弃。其理论依据就是响当当的CAP原理。我们往

分布式事务-两阶-三阶段提交

分布式一致性回顾在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\查等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。 为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复权衡过程中总结了许多典型的协议和算法。其中比较著名的有二阶提交协议(Two Phase Commitm

锁在Java虚拟机中的实现和优化

理解锁在Java虚拟机中的实现和优化之前,我们需要知道对象头和锁的关系。在Java虚拟机的实现中每个对象都有一个对象头,用于保存对象的系统信息。对象头中有一个称为Mark Word的部分,它是实现锁的关键,在32位系统中,Mark Word为32个比特位,64位系统中,为64个比特位。它是一个多功能的数据区,可以存放对象的哈希值,对象的年龄,锁的指针等信息,一个对象是否占用锁,占用哪个锁,就记录在