慣性聚合 関心のあるブログ、ニュース、テクノロジーを効率的に追跡
原文を読む 慣性聚合で開く

おすすめ購読元

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

阮一峰的网络日志

科技爱好者周刊(第 396 期):互联网通信的替代方案 科技爱好者周刊(第 396 期):互联网通信的替代方案 - 阮一峰的网络日志 科技爱好者周刊(第 395 期):软件开发的第三种方式 科技爱好者周刊(第 395 期):软件开发的第三种方式 - 阮一峰的网络日志 科技爱好者周刊(第 393 期):脑腐状态 科技爱好者周刊(第 392 期):axios 投毒与好莱坞式骗术 科技爱好者周刊(第 391 期):AI 的贫富分化 科技爱好者周刊(第 390 期):没有语料,大模型就是智障 套壳中国大模型撑起500亿美元估值?扒一扒 Cursor 的"套壳"疑云 科技爱好者周刊(第 389 期):未来如何招聘程序员 科技爱好者周刊(第 388 期):测试是新的护城河 零安装的"云养虾":ArkClaw 使用指南 科技爱好者周刊(第 387 期):你是领先的 科技爱好者周刊(第 386 期):当外卖员接入 AI 字节全家桶 Seed 2.0 + TRAE 玩转 Skill 科技爱好者周刊(第 385 期):马斯克害怕中国车企吗? 智谱旗舰 GLM-5 实测:对比 Opus 4.6 和 GPT-5.3-Codex 科技爱好者周刊(第 384 期):为什么软件股下跌 科技爱好者周刊(第 383 期):你是第几级 AI 编程 Kimi 的一体化,Manus 的分层 科技爱好者周刊(第 382 期):独立软件的黄昏 AI native Workspace 也许是智能体的下一阶段 科技爱好者周刊(第 381 期):中国 AI 大模型领导者在想什么 科技爱好者周刊(第 380 期):为什么人们拥抱"不对称收益" 科技爱好者周刊(第 379 期):《硅谷钢铁侠》摘录 我如何用 AI 处理历史遗留代码:MiniMax M2.1 升级体验 科技爱好者周刊(第 378 期):预测是新的互联网热点 科技爱好者周刊(第 377 期):14万美元的贫困线 科技爱好者周刊(第 376 期):太空数据中心的争议 科技爱好者周刊(第 375 期):一扇门的 Bug 终于有人做了 Subagent,TRAE 国内版 SOLO 模式来了 科技爱好者周刊(第 374 期):6GHz 的问题 VS Code 使用国产大模型 MiniMax M2 教程 科技爱好者周刊(第 373 期):数据模型是新产品的核心 国产大模型接入 Claude Code 教程:以 Doubao-Seed-Code 为例 科技爱好者周刊(第 372 期):软件界面如何设计 大模型比拼:MiniMax M2 vs GLM 4.6 vs Claude Sonnet 4.5 科技爱好者周刊(第 371 期):一个乐观主义者的专访 科技爱好者周刊(第 370 期):正确的代码高亮 错误处理:异常好于状态码 科技爱好者周刊(第 369 期):Tim 与罗永浩的对谈 科技爱好者周刊(第 368 期):不要这样管理软件团队 一天之内,智谱和 Anthropic 都发了最强编程模型 科技爱好者周刊(第 367 期):Nano Banana 的几个妙用 科技爱好者周刊(第 366 期):旧金山疯狂的 AI 广告 科技爱好者周刊(第 365 期):流量变现正在崩塌 科技爱好者周刊(第 364 期):最难还原的魔方 科技爱好者周刊(第 363 期):最好懂的神经网络解释 科技爱好者周刊(第 362 期):GitHub 工程师谈系统设计 科技爱好者周刊(第 361 期):暗网 Tor 安全吗?
分散型データベース入門:国産データベースTDSQLを例に
阮一峰 · 2024-05-29 · via 阮一峰的网络日志

一、概要

本日、皆さんと共有するいくつかの企業級のインターネット技術です。

紹介するのは分散データベース(distributed database)です。私はできるだけ分かりやすい言葉で、その概念、製品、使い方を説明し、文末では学習資料のダウンロードも提供します。

分散データベースは最も重要なデータベースであり、ほぼ全ての知っている大型のインターネットサービスは、それに基づいて動作しています。

普段、私たちが開発し、触れるのは単機データベース(集中式データベースとも呼ばれます)で、データベースは一台のサーバー上で動作するだけです。

(画像説明:左側の単一のデータベースサーバーが、全体のアプリケーションを支えています。)

分散データベースとは、データベースシステムが複数のサーバーに分散していることを指します。

(画像説明:単一のデータベースが複数のサーバーに分散し、共にアプリケーションを支えています。)

マクロなレベルでは、金融、電信、航空、物流、ECサイトなどの国民経済の重要産業は、分散型データベースなしではならない。

それがなければ、私たちは生活がどのようになるか想像するのが難しいだろう。例えば12306のような予約サイトもサービスを提供できなくなった。

個人レベルでは、初心者の開発者から大規模プロジェクトのアーキテクトになるにつれて、多少なりとも分散型データベースに直面する。

設計アーキテクチャを考える際、1台のサーバーだけを使う場合を除けば、どうやってデータを複数のサーバーに分割し保存するかを考慮する必要がある。

要するに、製品が大きくなってくると、分散型データベースは避けられないものだ。個人にとって、これはキャリアと能力の向上をも意味する。

二、分散型データベースの利点

分散型データベースがなぜ重要なのか?それは、単体データベースにはないいくつかの利点があるからだ。

(1)より安全。分散型データベースは複数のノードを含んでおり、同じデータセンター内に配置されていても異なるデータセンターに配置されていても、単一のマシンデータベースよりもはるかに安全です。

(2)高可用性。もし単一のデータベースノードが故障して停止した場合でも、他のノードは通常通りに動作し、単一障害点が発生しません。

(3)より良いパフォーマンス。大量のデータや大規模な計算処理のタスクに対しては、分散型データベースは並列処理を行うことができ、処理時間を大幅に短縮できます。

(4)より良い体験。データベースが複数のデータセンターに分散している場合、ユーザーに最も近いデータベースノードを割り当てることができ、より良い応答速度を提供します。

三、分散型データベースの難点

上記のような利点があるにもかかわらず、分散型データベースは普及しておらず、中小企業では一般的に使用されていません。なぜでしょうか?

主な理由は、分散型データベースには、普及を阻む二つの大きな問題がある:コストが高く、複雑である。

分散型データベースは「异地多活」に属し、追加の冗長性を提供してデータの安全性を確保するが、コストが高いのは言うまでもない。

その複雑性は主に以下の点に現れている。

(1)一貫性の問題。異なるノードのデータの一貫性をどう保証するか?ノードのデータが不一致になった場合どうするか?

(2)通信の問題。ノード間の通信をどうして信頼できるか?通信遅延や失敗があった場合どうするか?

(3)分割の問題。大規模なデータテーブルを分割し、データを異なるノードに保存する場合、分割戦略やノード間のデータ移行が非常に複雑になる可能性がある。

(4)最適化の問題。もし複数のノードからのデータを組み合わせる必要がある場合、クエリはパフォーマンスを向上させるために最適化される必要があります。

四、CAP定理

おそらく皆さんは知っていますが、有名なCAP定理があり、これは分散システム(分散データベースを含む)が克服できない限界について述べています。

分散システムには三大目標があります----データ整合性(Consistency)、高可用性(Availability)、データ分断耐性(Partition tolerance)。

CAP定理は、三大目標を同時に満たすことはできず、最大で2つだけを同時に達成できることを教えています。データ分断の前提で、強い整合性のために高可用性を放棄するか、高可用性のために強い整合性を放棄する必要があります。

したがって、どの分散データベースも完璧ではありませんが、三大目標の何らかのトレードオフとバランスが必要です。

五、分散型データベースの製品

分散型データベースの歴史は非常に長く、市場には少なくとも100種類以上の製品があり、オープンソースのものもあれば、クローズドソースのものもある。

ほぼ全ての分散型データベースは、単機で使用できる(すなわち単機データベースとして)か、複数の機器を連携させて分散型で使用できる。そのため、私たちがよく知っている単機データベースの多くは、実は分散型データベースである。

オープンソースの分散型データベースとして有名なのは、PostgresとMySQL(リレーショナルデータベース)、MongoDBとCockroachDB(非リレーショナルデータベース)である。

商用データベースの中で最も有名なのはOracleである。これは分散型データベースの実質的な標準であり、大企業は通常これを選択する。

六、国産データベースTDSQL

次に、国産データベースTDSQLを紹介する。 は、分散型データベースの機能と使い方を例として紹介する。

TDSQL は、テンセントの製品であり、国内をリードする分散型データベースである。テンセントのほぼすべての重要業務、例えば WeChat、QQ、Tencent Music、Tencent Games などが、それによって運用されており、高い強度と大量の実戦テストを経ている。

外部の多くの大企業もそれを使用しており、Little Red Book、Pinduoduo、Bilibili、Haier、Shenzhen Metro などが挙げられる。

それは完全に金融級の基準に従って作られており、金融級データベースに分類され、セキュリティ、高可用性、高並列性 を重視している。現在、顧客数は50万人を超えており、国内の金融業界ではトップ10の銀行のうち7つをサービスしており、30社以上の金融機関の核心システムの改造を支援している。

TDSQL は完全な国産データベースであり、特に Oracle の互換性を強調しており、企業が既存の Oracle データベースをスムーズに移行できる。そのコストは Oracle よりも多く低い。国内企業が国産化やサプライチェーンのセキュリティを考慮している場合、それは良い代替品となる。

その製品能力と自社開発は、国家認証を通過しました(『中国信息安全测评中心の安全信頼性評価結果公告(2023年第1号)』),国有企業の技術選定においても重要な考慮事項の一つです。

最後に、TDSQL は腾讯云が公開しているサービスで、誰でも利用できます。ウェブサイト上で数クリックするだけで利用開始でき、非常に簡単に始められます。

七、分散型データベースの機能

TDSQL を通じて、分散型データベースの機能を見てみましょう。

(1)強い同期複製。分散型データベースは通常、主従式アーキテクチャを採用し、一つのクラスターには主ノード(master)と複数の従ノード(slave)があります。システムはノード間の強い同期複製をサポートし、データの一貫性を保証します。

具体的には、データの書き込み時、主ノードは従ノードから操作成功のメッセージが返ってくるまで待ち、その後ユーザーに結果を返します。これにより、主ノードと従ノードのデータが完全に一致します。

(2)トランザクションの一貫性。システムは各トランザクションに対してグローバルに一意な数字シーケンスを提供し、各ノードはトランザクションの実行状況を照会でき、分散環境下でのトランザクションの一貫性を保証します。

(3)自動分割。分散データベースの大規模なデータテーブルは、しばしば分割して異なるノードに格納する必要があります。TDSQLは自動的水平分割(分表)をサポートし、データを均等に異なるノードに書き込み、クエリ時に自動的に集約して返します。

ユーザーにとって、分表は透明であり、完全に無視できます。ビジネスサイドが見るのは論理的に完全なテーブルであり、後端の分表の詳細を意識する必要はありません。

(4)高い拡張性。データベースのパフォーマンスや容量が不足する場合、TDSQLは停止せずに拡張でき、コンソールでクリックするだけで自動的にアップグレードが完了します。システム内のデータ移行、データバランス調整、ルーティング切り替えはすべて自動です。

(5)高い柔軟性。ユーザーはオンラインでテーブル構造を変更できます;特定のタイプの障害が発生した場合、システムは自動的に回復できます;すべてのノード、メインノードでも従属ノードでも、読み書きが可能です。

(6)製品管理能力。TDSQL は開発者に親しみやすく、多くの監視ツールを提供し、リアルタイム監視とアラート、毎日詳細な健康診断レポートを送信します。

腾讯云には専用のクラウドサービス DBbrain があり、機械学習、ビッグデータ、専門家経験エンジンなどの手段を利用して、ユーザーのデータベースにパフォーマンス、セキュリティ、管理などの機能を提供します。

例えば、SQL を包括的に診断し最適化し、パフォーマンスのボトルネックを発見し、SQL、トランザクション、ビジネスパイプライン全体を可視化して監視し、ロックなどの異常を視覚的に表示し、理解しやすくします。

これは多大く人工 DBA の役割を代替し、従来の人工運用を智能化サービスに変えています。

TDSQL には他に AI 智能質問応答システム(下図)があります。これは知識ベースと小規模モデルのトレーニングに基づき、ユーザーのクエリに迅速かつ正確に対応し、知能型カスタマーサービスとして専門的かつパーソナライズされた回答を提供します。

八、TDSQL の使い方

次に、TDSQL の使い方をデモンストレーションします。簡単で、ウェブサイトで開通した後、あなたは分散型データベースを使用できます。

第一步、TDSQL の公式ウェブサイトにアクセスし、製品コンソールに進みます。

第二步、コンソールページで、データベースサーバーが位置する地域(クラウドサーバーと同じ地域)およびデータベースエンジンを選択し、「新規作成」ボタンをクリックします。

現在 TDSQL には三種類のエンジンがあります:MySQL、自社開発の TDStore、および PostgreSQLです。どのエンジンでも、同じレプリケーション能力と高可用性を備え、Oracle との互換性も持っています。

第3ステップでは、データベース設定を選択するための設定ページが表示されます。設定内容によって価格が異なります。

その中に「強い同期」を開始するかどうかを尋ねる項目があります。

強い同期は、メインノードとスレーブノードのデータの整合性を保証します。アプリケーションが強い一貫性を要求しない場合、結果の迅速な返却を重視する場合は、「非同期」を選択できます。

第4ステップでは、設定が完了すると支払いの段階に入り、その後データベースが開始され、あなたの分散データベースはオンラインになります。

使用する際には、まずデータベースに接続する必要があります。内部ネットワーク接続と外部ネットワーク接続に分かれており、ここでは参照文書。注意点は、外ネットワーク接続を開始すると、データベースがインターネットに公開され、誰でもリクエストできるため、セキュリティリスクに注意する必要があります。

データベースに接続した後、SQL文を実行できます。この段階では、通常のデータベースを使用するのと何も変わらずです。分散データベースのSQLと単体データベースのSQLは基本的に同じです

九、TDSQLのベストプラクティス

分散データにはいくつかのベストプラクティスがあり、以下に3つ(MySQLエンジンを例に)を挙げます。

(1)どうやってデータを分散データベースにインポートするか

これは2つの状況に分けられます。第一种の状況は、既存の単体インスタンスを新しい分散インスタンスにインポートすることです。手順は以下の通りです(詳細なコマンドは文書を参照)。

  1. は単体データベースのテーブル構造とデータをエクスポートし、2つのSQLファイルを取得します。
  2. はデータベースのテーブル構造ファイルを開き、各テーブルの主キー(primary key)およびスレッディングの基準となるシャードキー(shardkey)を設定します。
  3. は修正された2つのSQLファイルをクラウドサーバーにアップロードし、分散データベースにインポートします。

は2番目のケースでは、既存の1つの分散インスタンスを別の分散インスタンスにインポートします。手順は上記と同じですが、第2のステップが省略され、主キーとシャードキーを指定する必要はありません。なぜなら、既に存在しているからです。(詳細なコマンドはドキュメントを参照)。

(2)どうやってスレッディングするか

スレッディング(sharding)は分散データベースの核心的な問題の一つです:どれだけのデータセグメントを設置するか?データは複数のセグメントにどのように分布するか?

スライス数は、データベース全体の最大並列処理能力と各スライスが処理できるリクエスト数によって決定され、以下の式で計算できます。

読書書き込み並列性能 = ∑(スライス性能 * スライス数)

個々のスライスの性能は、主にインスタンスのCPU/メモリ数に関連しています。個々のスライスの規格が高く、スライス数が多いほど、データベースシステムの処理能力が強化されます。

性能以外に、スライスは容量の問題も考慮する必要があります。一般的に、個々のスライスは最低でも5000万行のデータを格納する必要があります。

(3)ハードウェアの設定方法

分散データベースのハードウェアは、以下に3つの推奨設定を示します。

A. テスト機能。

この場合、性能は要求されず、システムの検証にのみ使用されるため、2つのノードを設定し、各ノードには2GBのメモリと25GBのハードディスクを搭載することを推奨します。

B. 业务発展初期。

このような状況ではデータ規模が小さく、成長が速いため、2つのノードを設定することを推奨します。各ノードには16GBのメモリと200GBのハードディスクを搭載します。

C. 業務の発展が安定している時期。

このような状況では、業務の実際の状況に応じて設定します。4つのノードを設定することができ、各ノードのハードウェアは「(現在の業務のピーク * 成長率)/ 4」です。

十、まとめ

総じて、現代の分散型データベース製品は、自身の多くの複雑さを隠蔽し、ユーザーに使いやすい操作インターフェースを提供しています。

一般的には、分散型データベースを自分で構築することは推奨されません。たとえ専門のデータベースエンジニアや運用エンジニアがいるとしても、コストが非常に高くなります。クラウドサービスプロバイダの製品を使用することは、より経済的で簡単な選択肢です。

TDSQLを例にとると、それにはクラスタ版とスタンダード版の2つのバージョンがあります。前者はマルチノードで、企業が生産環境で使用するために設計されています。後者はシングルノードで、コストが低く、個人向けに特化しており、機能は同じですが、個人開発者にとって学習や分散型データベースの試用に最適です。

(終)

福利内容

このAI時代において、クラウドサービスをどのように活用して、企業のデータ管理を支援するか?

以下に、国内の大手企業の実際の事例を3つ紹介します。

事例1:微信読書の「AI で本を質問する」。この機能は、AIが読者からの質問に答えることで、膨大な書籍内容に関する様々な質問に対応します。

事例2:海峡銀行の核心システムのアップグレード省立銀行はTDSQLを使用して、コアシステムを分散データベースにアップグレードする方法。

ケース3:エアリアルビッグデータプラットフォームのアーキテクチャ最適化。オーロラ(URORA)は国内をリードする開発者サービスプロバイダであり、データ量は約90PB、ノード数は1000を超え、ファイルは4億件です。どうすればアーキテクチャを最適化できるでしょうか?

それらはテンセントクラウド内部で書かれた資料ですAGI時代に選ぶべきフルスタックデータ管理ソリューションツールガイド、ユーザーケースシェアなど多くのコンテンツを含む。

今はできます無料ダウンロード、下のQRコードを微信でスキャンしてください。国内の実際の環境におけるエンタープライズ開発に関心があるなら、ぜひチェックしてみてください。