(面试准备)常见概念对比(单机与分布式)

数据库对比

NoSQL和关系型数据库对比

NoSQL和关系型数据库是两种不同类型的数据库。关系型数据库使用表格来存储数据,每个表格有一个固定的模式,且必须定义每个列的数据类型。而NoSQL则是一种非关系型的数据库,它们不使用表格,而是使用不同的数据模型来存储数据。

尽管NoSQL和关系型数据库使用了不同的数据模型,但它们之间仍存在一些联系。例如,NoSQL数据库可能使用关系型数据库中的某些概念,例如索引、键值对或集合。此外,一些NoSQL数据库也具备支持ACID事务的能力,这与关系型数据库的特性相似。

比较NoSQL和MySQL的优缺点

NoSQL优点:

  1. 高度可扩展:NoSQL数据库可以轻松地扩展到集群中的数千个节点,而无需更改架构或应用程序代码。
  2. 更好的性能:NoSQL数据库可以提供更快的读写速度,尤其是在处理大量数据时。
  3. 灵活性:NoSQL数据库通常不需要固定的模式或架构,因此可以更灵活地存储不同类型的数据。
  4. 水平扩展:NoSQL数据库可以分片并水平扩展,使得它们可以处理大量的数据和高流量负载。

NoSQL缺点:

  1. 缺少事务支持:NoSQL数据库通常不支持像ACID(原子性、一致性、隔离性和持久性)这样的完整事务,因此可能不适合某些应用程序。
  2. 缺少标准化:由于NoSQL数据库没有标准化的查询语言,因此可能更难进行复杂的查询和分析。
  3. 可能需要更多的开发工作:NoSQL数据库通常需要更多的开发工作来实现业务逻辑和查询功能,因为它们不支持标准查询语言。

MySQL优点:

  1. 具有丰富的功能:MySQL是一个成熟的关系型数据库管理系统,具有广泛的功能和特性,包括支持事务、索引、视图等。
  2. 支持标准SQL:MySQL支持标准SQL语言,使得开发人员可以使用已知的查询方法和工具。
  3. 支持ACID:MySQL支持ACID属性,确保了数据的强一致性和完整性。
  4. 安全性:MySQL针对安全性具有良好的支持,可以限制用户访问权限和数据加密等。

MySQL缺点:

  1. 限制扩展:MySQL可能需要更多的硬件资源以处理大量数据和高负载情况,并且扩展性受到物理硬件限制。
  2. 数据结构限制:MySQL在设计时需要考虑数据库表的结构和关系,因此更适合基于结构化数据的应用程序。
  3. 维护困难:MySQL在处理大规模数据时可能需要更多的维护工作,包括备份、恢复和调整性能等。

锁对比

本地锁和分布式锁对比

对于单机多线程来说,在 Java 中,我们通常使用 ReetrantLock 类、synchronized 关键字这类 JDK 自带的 本地锁 来控制一个 JVM 进程内的多个线程对本地共享资源的访问。

下面是我对本地锁画的一张示意图。
本地锁实现原理
从图中可以看出,这些线程访问共享资源是互斥的,同一时刻只有一个线程可以获取到本地锁访问共享资源。

多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁 就诞生了。

下面是我对分布式锁画的一张示意图。
分布式锁示意图
从图中可以看出,这些独立的进程中的线程访问共享资源是互斥的,同一时刻只有一个线程可以获取到分布式锁访问共享资源。

一个最基本的分布式锁需要满足:

  • 互斥 :任意一个时刻,锁只能被一个线程持有;
  • 高可用 :锁服务是高可用的。并且,即使客户端的释放锁的代码逻辑出现问题,锁最终一定还是会被释放,不会影响其他线程对共享资源的访问。
  • 可重入:一个节点获取了锁之后,还可以再次获取锁。

参考文献:

  1. Java Guide
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值