データベーステーブルの分割3つのソリューション

「上をクリックするJavaのバックエンド技術スタック「パブリックいいえ「を選択します」

技術的な記事を初めて配信!

3つのソリューションのデータベースのサブライブラリーのサブテーブル

データベースを分割する2つの方法があり、テキストは、垂直解像度と水平解像度、サブライブラリーサブテーブルは、分割データベースを解決すること、すなわち、前述の話されています。論理スライスの実施形態のためのサブライブラリーサブテーブルの異なるレベルに応じて、我々は、実装のデータベースライブラリサブテーブルは、3つのカテゴリーに分けられる分割することができ

  1. クライアントのフラグメンテーション

  2. 演技のフラグメンテーション

  3. 分散データベース・トランザクションのサポート

クライアントのフラグメンテーション

サブライブラリーは、直接ロジックスライスを動作するアプリケーション層のパーティションテーブルのデータベースを使用することで、スライス規則は、同じアプリケーションの複数のノード間で同期される各アプリケーション層を必要とするスライスの動作を実現するロジック(スライスに埋め込まれていますルールが)、これは一般的にjarファイルのパッケージに依存することによって達成されます。

特定の実装には3つのタイプに分けることができますがあります。

  • 直接アプリケーション層で

  • カスタムJDBCプロトコルを介して達成

  • カスタムのORMフレームワークを通じて達成

直接アプリケーション層で

これは非常に汎用性と簡単な解決法では、解決断片化規則は、その後、ルーティングロジックは、特定のセグメントの断片化のルールに従って実装、アプリケーション層フラグメンテーションルールで直接読み取ります。各動作のためのアプリケーション層から直接そのデータベースインスタンス、データベース・テーブルなど、どのデータベースが使用されるべきであると決定します。

以下は、会社での使用のための一般的な内部ロジックがするこれ​​らのパッケージは、標識されたjarファイルパッケージ、その他の項目です。

カスタムJDBCプロトコルを介して達成されます

小さなパートナーがビジネスのコードに埋め込まれたアプリケーション層のロジックチップに多かれ少なかれ直接的に達成するには、子供の能力の開発は、まだビジネスロジックを実装するために、だけでなく、フレームワークの要件を達成するために、両方の必要性の開発は非常に高いです。ビジネスロジックの実装に集中するために小さなパートナーの開発のためには、我々は小さなパートナーに開発者がサブライブラリーポイントを心配する必要はありませんことができますJDBCプロトコル・インタフェースを提供するためのビジネスロジックと一致しているカスタムJDBCプロトコルを通じて達成することができますビジネスにテーブル、その内部JDBCにおけるそのサブライブラリーのサブテーブルの実装クラス、および透明性を実装します。このソリューションは、小規模なパートナーとある程度の人員のサブライブラリーのサブテーブルの開発は、に大きなエクステントに小さなパートナーの開発が可能に、左に分けることができるように、ビジネスに行くためのコードに埋め込まれていない、ビジネスに透明であり、行くためにビジネスロジックを実装するが、小さなパートナーの開発にはまだサブライブラリーサブテーブル・ロジックを実現するためにJDBCプロトコルを理解する必要があります。

例:現在の一般的なクライアントのサブライブラリーのサブテーブルフレームシャーディング-JDBC、そのようなプログラムを使用することです。

カスタムのORMフレームワークを通じて達成

由于关系型数据库与面向对象语言之间的差异,ORM框架得到了广泛的发展和应用,因此就有了通过定制ORM框架实现的分库分表方案,也就是把分片规则实现到了ORM框架中或者通过ORM框架支持的扩展机制来完成分库分表的逻辑。

在很多公司里是通过在Mybatis配置文件的SQL中增加表索引的参数来实现分片的。

demo代码如下:

<select id="getUser" parameter="java.util.Map" resultType="User">
    SELECT user_id,user_name FROM USER_#{index} WHERE user_id=#{userId}
<>

代理分片

就是在应用层和数据库层之间加一层代理层,把分片的路由规则配置在代理层,代理层对外提供与JDBC相兼容的接口给应用层,应用层的开发小伙伴们就不用关心分片规则了,只需要关心业务代码的实现,等业务代码实现完了以后,在代理层配置一个路由规则就搞定了。

优缺点:

优点:让应用层的开发小伙伴们更多去关注业务代码的实现,把分库分表的配置留给代理层做。

缺点:增加了代理层,增大了成本。

尽管代理层是轻量级的转发协议,但是毕竟要实现JDBC协议的解析,并且还有通过分片的路由规则来路由请求,对每个数据库操作都增加一个网络传输,这对新性能是很有影响的,需要维护增加的代理层,也有硬件成本,最主要的是需要有大牛在,大牛专门解决代理层出现的bug,哈哈,所以嘛,成本相对高不少。

比如:当前流行的分库分表使用代理分片实现的框架有Cobar、Mycat等。

支持事务的分布式数据库

现在有很多产品,比如:OceanBase、TiDB等对外提供可伸缩的体系架构,并提供一定的分布式事务支持,将可伸缩的特点和分布式事务的实现包装到分布式数据库内部实现,对其使用者透明,使用者不需要直接控制这些特性,例如:TiDB对外提供JDBC的接口,让应用层想使用Mysql等传统数据库依赖来使用TiDB,而不需要关注其内部是如何实现伸缩、分片以及处理分布式事务的。

大家都知道在金融行业,最重要的就是钱,什么金额,余额等。所以金融行业在技术方便还是比较保守的,毕竟是在于钱打交道,每天的交易流水上亿都是很正常的。在各种交易系统中,我么通常采用对事务支持良好的关系型数据库,很少有使用其他类型的数据库,而这些分布式数据库更适合实现非交易系统,比如说:大数据日志系统、统计系统、查询系统、报表系统、社交系统等等。

扫描关注,获取更多知识

发布了321 篇原创文章 · 获赞 96 · 访问量 63万+

おすすめ

転載: blog.csdn.net/o9109003234/article/details/104421476
おすすめ