计算和存储分离的数据库的优缺点

想请问下,计算存储分离的数据库和计算存储不分离的数据库都各有哪些优缺点?

我来个抛砖引玉吧,你说的这两种架构刚好有对应产品,比较典型的,分离的是tidb,不分离的是ob(还有像cockroachdb和yugabytedb,计算和存储在一个进程中)。

分离的好处:计算或存储可以单独横向扩展,更灵活
分离的坏处:网络通信成本更高(数据拿到后要丢给计算层去处理),延时大

其他的欢迎各路大佬补充~

瞎说一通:

分的越散,管理的越精细,对应的额外付出的成本越高。

小规格的情况下还要分3部分,那指定是亏本买卖。

大集群的情况下。分的越细,cpu内存等资源利用率可以打得越高。

仅作参考。
读写分离的数据库典型如TiDB;读写不分离的数据库典型如oceanbase;
架构来说
1、ob由proxy server(调度、负载均衡),observer(计算和存储)两个角色构成,observer由若干region组成。如果规模庞大,则由observer组成若干zone。从运维角度来说,非常方便。
2、tidb由pd(调度服务器)、tidb server(计算)、tiKV(存储)。如果需要AP则还要增加tiflash,需要采集增加CDC。有tiup,部署也不难。

从架构来看,单纯的读和写,ob应该比tb强;但是如果涉及到计算,特别是计算和存储分离的那种,我估计tidb一定强于ob。

从实际体验来看,tb的易用性强于ob。

从我个人建议出发,如果数据库服务器只有10台以内,tidb会远强于ob;10-100台我不确定谁强谁弱。100台以上就看dba的能力了,他说了算。

chatGPT:
计算和存储分离的数据库的优点是:

  1. 可以实现无限扩展:计算和存储可以分别进行独立的扩展和升级,可以根据需求动态调整系统容量。

  2. 可以提高性能:分离计算和存储可以根据需求进行优化,提高查询效率,提高整个系统的性能。

  3. 可以提高可用性:因为计算和存储是分离的,一方面可以避免单点故障,另一方面可以提高系统的可用性和容错能力。

  4. 便于维护和管理:计算和存储分离后,可以分别进行管理,使整个系统的维护更加方便。

计算和存储分离的缺点是:

  1. 系统架构复杂:计算和存储分离后,需要进行多个组件的链接和协调,系统结构会更加复杂。

  2. 部署成本较高:在计算和存储分离的情况下,需要部署更多的硬件设备,因此成本会更高。

  3. 数据传输消耗资源:计算和存储分离后,需要将数据从存储系统传输到计算系统,这会消耗资源,降低系统效率。

计算存储分离的数据库:

优点:

  • 数据库的计算和存储分别由不同的硬件系统处理,可以更好地平衡系统资源。
  • 通过将计算和存储分开,可以轻松地扩展和升级每个部分,使系统更加灵活和可靠。
  • 可以降低成本,因为存储和计算可以在不同的硬件上进行,可以根据需求选择适合的硬件。

缺点:

  • 分离数据计算和存储需要额外的软件和硬件,这会增加成本。
  • 分离计算和存储可能会增加延迟,因为需要通过网络发送数据。
  • 系统的管理复杂度可能会增加,因为需要处理两个独立的硬件系统。

计算存储不分离的数据库:

优点:

  • 计算和存储在同一台机器上,可以减少延迟并提高性能。
  • 管理起来比较简单,只需要操作一台机器就行了。
  • 这种架构通常用于小型系统,因此相对来说比较容易实现和维护。

缺点:

  • 随着数据量的增加,可能需要更多的硬件资源,因此需要更多的成本。
  • 这种架构通常很难扩展,因此不适用于大型系统。如果需要扩展,可能需要重新设计整个系统。
  • 如果发生硬件故障,可能会丢失所有数据,因为计算和存储在同一台机器上。

总之,无论使用哪种架构,都需要根据具体的业务需求以及预算和技术资源来进行选择。

缺点:增加系统维护性,成本增加
优点:可扩展性好

增加网络开销