加入收藏 | 设为首页 | 会员中心 | 我要投稿 莆田站长网 (https://www.0594zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

用于远程工作和在线会议的开源视频会议工具

发布时间:2021-02-18 14:03:09 所属栏目:动态 来源:互联网
导读:如果根据该文中的分类,Spanner、TiDB、OB 算是第一种新架构型,Sharding-Sphere、Mycat、DRDS 等中间件方案算是第二种(文中还有第三种云数据库,本文暂不详细介绍)。 基于中间件(包括 SDK 和 Proxy 两种形式)+传统关系数据库(分库分表)模式是不是分布式架构

如果根据该文中的分类,Spanner、TiDB、OB 算是第一种新架构型,Sharding-Sphere、Mycat、DRDS 等中间件方案算是第二种(文中还有第三种云数据库,本文暂不详细介绍)。

基于中间件(包括 SDK 和 Proxy 两种形式)+传统关系数据库(分库分表)模式是不是分布式架构?

我觉得是的,因为存储确实也分布式了,也能实现横向扩展。但是不是"伪"分布式数据库?从架构先进性来看,这么说也有一定道理。

"伪"主要体现在中间件层与底层 DB 重复的 SQL 解析与执行计划生成、存储引擎基于 B+Tree 等,这在分布式数据库架构中实际上冗余低效的。

为了避免引起真伪分布式数据库的口水战,本文中 NewSQL 数据库特指这种新架构 NewSQL 数据库。

 

上也有很多关于中间件+传统关系数据库(分库分表)与 NewSQL 分布式数据库的文章,但有些观点与判断是我觉得是偏激的,脱离环境去评价方案好坏其实有失公允。

本文通过对两种模式关键特性实现原理对比,希望可以尽可能客观、中立的阐明各自真实的优缺点以及适用场景。

NewSQL 数据库先进在哪儿?

首先关于“中间件+关系数据库分库分表”算不算 NewSQL 分布式数据库问题,国外有篇论文 pavlo-newsql-sigmodrec:


 

我先给大家介绍一下弱引用:

只具有弱引用的对象拥有更短暂的生命周期,在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。

不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

这就导致了一个问题,ThreadLocal在没有外部强引用时,发生GC时会被回收,如果创建ThreadLocal的线程一直持续运行,那么这个Entry对象中的value就有可能一直得不到回收,发生内存泄露。

就比如线程池里面的线程,线程都是复用的,那么之前的线程实例处理完之后,出于复用的目的线程依然存活,所以,ThreadLocal设定的value值被持有,导致内存泄露。

按照道理一个线程使用完,ThreadLocalMap是应该要被清空的,但是现在线程被复用了。

那怎么解决?

在代码的最后使用remove就好了,我们只要记得在使用的最后用remove把值清空就好了。

ThreadLocal localName = new ThreadLocal();try { localName.set("张三"); ……} finally { localName.remove();}

 

我就截取了部分代码,如果线程的inheritThreadLocals变量不为空,比如我们上面的例子,而且父线程的inheritThreadLocals也存在,那么我就把父线程的inheritThreadLocals给当前线程的inheritThreadLocals。

是不是很有意思?

小伙子你懂的确实很多,那你算是一个深度的ThreadLocal用户了,你发现ThreadLocal的问题了么?

你是说内存泄露么?

我丢,这小子为啥知道我要问什么?嗯嗯对的,你说一下。

这个问题确实会存在的,我跟大家说一下为什么,还记得我上面的代码么?


(编辑:莆田站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读