作者:用户cnhr0qjy0s | 来源:互联网 | 2023-08-06 19:44
全局唯一ID如果系统有使用数据库,最常想到的全局唯一ID是利用数据库的自增字段来保证唯一性。这种方法生成的长度不同,并且与数据为交互,性能较差。其它两个常用的两个算法是:UUID与
全局唯一ID
如果系统有使用数据库,最常想到的全局唯一ID是利用数据库的自增字段来保证唯一性。这种方法生成的长度不同,并且与数据为交互,性能较差。
其它两个常用的两个算法是: UUID与snowflake
- UUID
通用唯一识别码,不依赖中间机构的注册和分配,32位字符,提供5个算法实现,具体算法可以网上搜索。
- 算法1,2可以保证唯一性;
- 算法3、5除了利用的hash算法不同外,其它都相同,可以保证局部唯一,有极小的概率重复,可忽略不计。
- 算法4,使用伪随机算法,不建议使用
- 嵌入到业务代码中,不涉及服务调用性能更高,但机器ID数有限制,过多会有重复
- 作为服务提供,可以通过服务数,来降低机器ID数,可以用多余的位表示其它信息。
- 全局唯一
- 单调递增
- 包含业务含义ID
- 依赖于系统的时间戳,一旦系统时间不准,就有可能生成重复的 ID,要防止系统时间回跳。
NOSQL
NOSQL区别于关系型数据库系统,不使用SQL查询语言,提供优秀的横向扩展能力和读写性能,非常适合于高并发大数据的系统。
常见的:redis, leveldb这样的KV存储;Hbase、Cassandra列式存储数据库(关系数据库是行式);MongoDB、CouchDB文档型数据库。
NOSQL虽然有很多优点,但它不能完全替换关系型数据库,每种都有其适应的场景,可以与关系统数据库做到互补。
- 提高写入性能
大部份NoSql会使用LSM 树做为存储引擎来提高写入性能,将随机写改为顺序写。
- NoSQL 数据库的支持全文搜索功能,可以很好的支持关系型数据库这方面的不足;
- 在扩展性方面,NoSQL 数据库天生支持分布式,支持数据冗余和数据分片的特性。
缓存
在平常的开发过程中,对于IO的性能的优化,较常想到的方式就是增加缓存。
- 从概念上讲,缓存是一种存储数据的组件,可以让对数据的请求更快地返回。由于设备之间读写性能差距较大,能过将数据放入读写性能较高的设备中,提高读写性能。
- 常见的缓存场景有:系统内存的分配、视频网站的缓存、静态网页的缓存。
- 静态缓存:从字面意思就是对静态数据的缓存,常见的静态页面缓存就属于这类,一般位于负载均衡层。
- 分布式缓存:支持动态数据,能过在服务前部署分布式缓存来提高服务性能,一般位于应用层与数据层之间。
- 本地缓存,位于应用层,在应用中直接实现。
- 缓存并不能解决所有问题,一般适应于读多写少的场景,数据最好带有热点属性。缓存会带来系统的复杂性,并且可能会出现数据不致的性况。会带来一定的运维成本。在系统的设计中,需要全局考虑,才能带来优势最大化的效果。