数据库对比
NoSQL和关系型数据库对比
NoSQL和关系型数据库是两种不同类型的数据库。关系型数据库使用表格来存储数据,每个表格有一个固定的模式,且必须定义每个列的数据类型。而NoSQL则是一种非关系型的数据库,它们不使用表格,而是使用不同的数据模型来存储数据。
尽管NoSQL和关系型数据库使用了不同的数据模型,但它们之间仍存在一些联系。例如,NoSQL数据库可能使用关系型数据库中的某些概念,例如索引、键值对或集合。此外,一些NoSQL数据库也具备支持ACID事务的能力,这与关系型数据库的特性相似。
比较NoSQL和MySQL的优缺点
NoSQL优点:
- 高度可扩展:NoSQL数据库可以轻松地扩展到集群中的数千个节点,而无需更改架构或应用程序代码。
- 更好的性能:NoSQL数据库可以提供更快的读写速度,尤其是在处理大量数据时。
- 灵活性:NoSQL数据库通常不需要固定的模式或架构,因此可以更灵活地存储不同类型的数据。
- 水平扩展:NoSQL数据库可以分片并水平扩展,使得它们可以处理大量的数据和高流量负载。
NoSQL缺点:
- 缺少事务支持:NoSQL数据库通常不支持像ACID(原子性、一致性、隔离性和持久性)这样的完整事务,因此可能不适合某些应用程序。
- 缺少标准化:由于NoSQL数据库没有标准化的查询语言,因此可能更难进行复杂的查询和分析。
- 可能需要更多的开发工作:NoSQL数据库通常需要更多的开发工作来实现业务逻辑和查询功能,因为它们不支持标准查询语言。
MySQL优点:
- 具有丰富的功能:MySQL是一个成熟的关系型数据库管理系统,具有广泛的功能和特性,包括支持事务、索引、视图等。
- 支持标准SQL:MySQL支持标准SQL语言,使得开发人员可以使用已知的查询方法和工具。
- 支持ACID:MySQL支持ACID属性,确保了数据的强一致性和完整性。
- 安全性:MySQL针对安全性具有良好的支持,可以限制用户访问权限和数据加密等。
MySQL缺点:
- 限制扩展:MySQL可能需要更多的硬件资源以处理大量数据和高负载情况,并且扩展性受到物理硬件限制。
- 数据结构限制:MySQL在设计时需要考虑数据库表的结构和关系,因此更适合基于结构化数据的应用程序。
- 维护困难:MySQL在处理大规模数据时可能需要更多的维护工作,包括备份、恢复和调整性能等。
锁对比
本地锁和分布式锁对比
对于单机多线程来说,在 Java 中,我们通常使用 ReetrantLock 类、synchronized 关键字这类 JDK 自带的 本地锁 来控制一个 JVM 进程内的多个线程对本地共享资源的访问。
下面是我对本地锁画的一张示意图。
从图中可以看出,这些线程访问共享资源是互斥的,同一时刻只有一个线程可以获取到本地锁访问共享资源。
多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁 就诞生了。
下面是我对分布式锁画的一张示意图。
从图中可以看出,这些独立的进程中的线程访问共享资源是互斥的,同一时刻只有一个线程可以获取到分布式锁访问共享资源。
一个最基本的分布式锁需要满足:
- 互斥 :任意一个时刻,锁只能被一个线程持有;
- 高可用 :锁服务是高可用的。并且,即使客户端的释放锁的代码逻辑出现问题,锁最终一定还是会被释放,不会影响其他线程对共享资源的访问。
- 可重入:一个节点获取了锁之后,还可以再次获取锁。
参考文献: