ホームページ データベース mysql チュートリアル 解读BigTable类NoSQL数据库的选型与设计

解读BigTable类NoSQL数据库的选型与设计

Jun 07, 2016 pm 04:30 PM
bigtable nosql データ データベース 解釈 デザイン 選択

数据规模 BigTable类数据库系统(HBase,Cassandra等)是为了解决海量数据规模的存储需要设计的。这里说的海量数据规模指的是单个表存储的数据量是在TB或者PB规模,单个表是由千亿行*千亿列这样的规模组成的。提到这个数据规模的问题,不得不说的就是现在在NoSQ

  数据规模

  BigTable类数据库系统(HBase,Cassandra等)是为了解决海量数据规模的存储需要设计的。这里说的海量数据规模指的是单个表存储的数据量是在TB或者PB规模,单个表是由千亿行*千亿列这样的规模组成的。提到这个数据规模的问题,不得不说的就是现在在NoSQL市场中,最火的四种NoSQL系统依次是MongoDB,Redis,Cassandra,HBase。我们知道Cassandra和HBase都是BigTable类系统,而且都是名门出身(得到了Facebook,Yahoo,Twitter等的大力支持)。那么为什么最火的是MongoDB呢?难道是因为HBase不够优秀么?我认为原因很简单,毕竟大部分公司的数据规模还达不到Facebook,Yahoo等那么大,使用MongoDB足以满足他们的需求。MongoDB所提供的Auto-sharding, schema-less等功能,正好解决了这样数据规模的公司在使用RDBMS过程中遇到的问题。

  数据模型

  而且BigTable类数据库系统的数据模型相对简单,一般不涉及多表的JOIN操作。在这样的规模下,传统的RDBMS应用越来越受到限制,维护和升级的成本越来越高。而且传统RDBMS由于基于share-storage的设计,scale-out的能力不强。把基于share-storage的RDBMS做成分布式数据库,需要用户来开发Proxy层。上述种种问题使得我们在面对海量数据的时候不得不考虑像BigTable这样的NoSQL存储方案。那么对于习惯了为RDBMS设计schema的DBA们来说,迁移到BigTable类NoSQL系统时的schema设计问题,就需要换一个思路来考虑这个问题了。这篇文章就是介绍在BigTable类系统中如何设计table的schema,以及随着数据规模的扩展,一些传统RDBMS应用向BigTable系统迁移过程中需要注意的问题。

  NoSQL数据库把可扩展性放到了首位,那么必然会造成一定量的数据冗余,通过数据冗余的方式实现在RDBMS中的不同表格之间的关系表达。而且在BigTable类系统中,不会提供SQL类的复杂查询表达和各种优化功能,仅仅提供海量的数据存储能力。所以,就像在Facebook的统一消息系统中一样,很多时候是用一行来存储一个用户的所有信息。那么在BigTable类系统中,一行所能存储的数据量就是非常大的。前段时间在微博上有传闻说Apple的siri系统后台是用的HBase,我想如果是真的话,那么一个用户的个人助理信息也应该是存在一行里吧,呵呵。更有意思的是,Apple的保密工作做的真好,而且声东击西。明明用的是HBase,招聘的时候非说会Cassandra和MongoDB的有加分。

  在BigTable类系统schema设计中还需要注意的就是列族特性。因为BigTable类系统本质上是按照列族存取的,同一个列族里不同列有一个共同点就是数据类型相同。相同的数据类型就会使得数据在磁盘和内存之间IO时的压缩率非常高,这是所有面向列的存储系统的共同优势。那么我们在考虑一行所要存储的信息时,就可以按照各个属性的数据类型的不同存放到相应的列族中。由于BigTable是一个稀疏的表格系统,所以可能某一行具备的某一属性在其他所有的行里都不存在,但是这个属性的数据类型(例如int)的属性在其他行基本上肯定会存在所以在实际的存储中,同一列族的属性是存放到一起的。

  非规范化

  在NoSQL系统数据建模中,经常提到一个Denormalization的概念,就是非规范化。举个简单的例子就是在RDBMS中的Entity和这些Entity之间的关系存储到NoSQL中的同一个表格中。例如在RDBMS的规范化数据建模中,有两个表格:Student(StudentID,StudentName,Tutor,CourseID), Course(CourseID,CourseName)。而在BigTable类NoSQL系统中,只有一个表格Student(StudentID,StudentName,Tutor,CourseID,CourseName)。那么对于在传统RDBMS中需要读取两个表格的信息,然后JOIN在一起获得或者聚合某些用户的信息,在NoSQL系统中只需要读取一次就可以获取某些用户的信息了。

  Row Key

  BigTable类系统schema设计需要注意的另外一个问题就是Row的天然有序性。BigTable类系统把Row Key都是解释成String的,并且按照String的字母顺序来组织Row的。所以这一特性就可以被我们的schema设计所利用。例如我们的应用经常需要用到某一属性的索引或者几个属性组合的索引,那么就可以用这一属性或者属性组合来做Row Key。这一点非常类似于RDBMS中的索引和组合索引,只不过在BigTable类系统中,这是天然存在的。需要注意的是,在HBase系统中属性组合作为Row Key时,需要用特殊的符号将各个单独的组成部分拼接起来,但是“/”是不能作为Row Key中不同属性的分割符的,我们可以用“_”。

  数据一致性和事务

  在数据一致性方面,在传统的RDBMS系统中,每一列的属性可以规范成NOT NULL, UNIQUE或者CHECK等,由RDBMS系统来为用户保证数据的一致性需求。在BigTable类系统中,这一需求在DB层并没有保证,而是由用户层程序来保证的。由于开源系统HBase具备行一致性和行原子性,而且一般一行存放一个用户的信息,所以维护数据一致性的代价相对较小。如果BigTable类系统的schema设计不佳,造成复杂的数据冗余,那么对于应用层来维护数据一致性的代价就很大了。

  关于BigTable类系统的事务支持说起来就很复杂了。简单的就是HBase只支持行级的锁,如果打算实现类似于RDBMS的事务特征,就得结合HBase和Zookeeper了。关于这方面在本文不做详细讨论,后面会专门发文讨论Google的关于Percolator和Megastore的paper。这两篇paper主要讨论了如何在利用NoSQL系统实现事务,如何打通NoSQL和SQL的。

  索引

  关于索引是每个DB系统都需要考虑的问题。从BigTable的论文中可以看出其为每列维护特殊的单列索引,允许创建多列索引。这些索引由BigTable自动维护,查询时由BigTable自动选择使用哪些索引。这一点和RDBMS就比较接近了。而开源实现的HBase除了自动有序的Row Key作为索引以外,只提供一个自动维护secondary index。但是查询时该使用那些索引,得由应用层来决定。关于HBase的secondary index的实现有多种方式,貌似最近还和coprocessor扯上了关系,可以参考这个http://kenwublog.com/hbase-secondary-index-and-join。 HBase同时允许创建和使用存储在文件系统上的Lucene索引。关于HBase和Lucene的结合,可以参考这里http://www.infoq.com/articles/LuceneHbase。

解读BigTable类NoSQL数据库的选型与设计7月21日前,通过TechTarget中国专用注册码“TECH13PR”注册参加甲骨文全球大会,即可享受最低折扣!还有50元手机充值卡等您拿!活动详情请见: http://www.searchdatabase.com.cn/edm/oracle/20130515/index.html

解读BigTable类NoSQL数据库的选型与设计

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Honor Magic V3 が AI デフォーカス眼保護技術をデビュー: 近視の進行を効果的に軽減 Honor Magic V3 が AI デフォーカス眼保護技術をデビュー: 近視の進行を効果的に軽減 Jul 18, 2024 am 09:27 AM

7月12日のニュースによると、Honor Magic V3シリーズは本日正式にリリースされ、新しいHonor Vision Soothing Oasisアイプロテクションスクリーンを搭載しており、スクリーン自体は高スペックで高品質であると同時に、AIアクティブアイプロテクションの導入も先駆けとなっています。テクノロジー。近視を軽減する伝統的な方法は「近視メガネ」であると報告されています。近視メガネの度数は均等に分散され、視野の中心領域は網膜上に結像されますが、周辺領域は網膜の後ろに結像されます。網膜は像が遅れていると認識し、眼軸方向の成長を促進し、その度数が深くなります。現在、近視の進行を軽減する主な方法の 1 つは、「デフォーカス レンズ」です。中央領域は通常の度数で、周辺領域は光学設計の隔壁によって調整され、周辺領域の像が収まります。網膜の前。

AI スタートアップ企業は一斉に OpenAI に転職し、イリヤが去った後にセキュリティ チームが再編成されました。 AI スタートアップ企業は一斉に OpenAI に転職し、イリヤが去った後にセキュリティ チームが再編成されました。 Jun 08, 2024 pm 01:00 PM

先週、社内の辞任と社外からの批判が相次ぐ中、OpenAIは内外のトラブルに見舞われた。 - 未亡人姉妹への侵害が世界中で白熱した議論を巻き起こした - 「覇権条項」に署名した従業員が次々と暴露 - ネットユーザーがウルトラマンの「」をリストアップ噂の払拭: Vox が入手した漏洩情報と文書によると、アルトマンを含む OpenAI の上級幹部はこれらの株式回収条項をよく認識しており、承認しました。さらに、OpenAI には、AI セキュリティという深刻かつ緊急の課題が直面しています。最近、最も著名な従業員2名を含むセキュリティ関連従業員5名が退職し、「Super Alignment」チームが解散したことで、OpenAIのセキュリティ問題が再び注目を集めている。フォーチュン誌は OpenA を報じた。

Honor X60i携帯電話は1,399元から販売中:視覚的な四角形OLEDダイレクトスクリーン Honor X60i携帯電話は1,399元から販売中:視覚的な四角形OLEDダイレクトスクリーン Jul 29, 2024 pm 08:25 PM

7月29日のニュースによると、Honor X60i携帯電話は本日正式に発売され、価格は1,399元からとなっている。デザインの面では、Honor X60i 携帯電話は、中央に穴があり、四辺すべてにほぼ境界のない超狭い境界線を備えたストレート スクリーン デザインを採用しており、視野が大幅に広がります。 Honor X60i パラメータ ディスプレイ: 6.7 インチ高解像度ディスプレイ バッテリー: 5000mAh 大容量バッテリー プロセッサー: Dimensity 6080 プロセッサー (TSMC 6nm、2x2.4G A76+6x2G A55) システム: MagicOS8.0 システム その他の機能: 5G 信号強化、スマートカプセル、画面下指紋認証、デュアルMIC、ノイズリダクション、知識Q&A、撮影機能:背面デュアルカメラシステム:5000万画素メインカメラ、200万画素補助レンズ、フロントセルフィーレンズ:800万画素、価格:8GB

信号が最も強い Vivo の携帯電話! vivo X100s にはユニバーサル信号増幅システムが装備されています: 21 本のアンテナ、360° サラウンド設計 信号が最も強い Vivo の携帯電話! vivo X100s にはユニバーサル信号増幅システムが装備されています: 21 本のアンテナ、360° サラウンド設計 Jun 03, 2024 pm 08:41 PM

5 月 13 日のニュースによると、vivoX100s は今夜正式にリリースされました。優れた画像に加えて、新しい携帯電話は信号の面でも非常に優れています。 vivo の公式紹介によると、vivoX100s は最大 21 個のアンテナを備えた革新的なユニバーサル信号増幅システムを使用しています。この設計は、5G、4G、Wi-Fi、GPS、NFC などの多くの信号要件のバランスをとるために、ダイレクト スクリーンに基づいて再最適化されています。これにより、vivoX100s は vivo 史上最強の受信能力を備えた携帯電話となります。新しい電話機は、本体の周囲にアンテナを配置した独自の 360 度サラウンド設計も採用しています。この設計は信号強度を高めるだけでなく、日常のさまざまな保持姿勢を最適化し、不適切な保持方法によって引き起こされる問題を回避します。

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

新しいスタッキングプロセス! Xiaomi MIX Fold 4は初めて金沙江「三次元特殊形状」バッテリーを搭載 新しいスタッキングプロセス! Xiaomi MIX Fold 4は初めて金沙江「三次元特殊形状」バッテリーを搭載 Jul 20, 2024 am 03:20 AM

7月19日のニュースによると、初の主力折りたたみ新型携帯電話であるXiaomi MIX Fold 4が今夜正式にリリースされ、初めて「三次元特殊形状バッテリー」を搭載したとのこと。レポートによると、Xiaomi MIX Fold4はバッテリー技術で大きな進歩を遂げ、折りたたみ式スクリーン専用に革新的な「三次元特殊形状バッテリー」を設計しました。従来の屏風型端末は、スペース利用効率が低い従来の角形電池を使用することがほとんどでした。この問題を解決するために、Xiaomi は一般的な巻回バッテリーセルを使用せず、新しいラミネートプロセスを開発して新しい形式のバッテリーを作成し、スペース利用率を大幅に改善しました。バッテリー技術の革新 正極シートと負極シートを正確に交互に積み重ね、リチウムイオンの安全な埋め込みを確保するために、Xiaomi は新しい超音波溶接機とラミネート機を開発し、溶接と切断の精度を向上させました。

70B モデルは数秒で 1,000 トークンを生成、コード書き換えは GPT-4o を超える、OpenAI が投資したコード成果物である Cursor チームによる 70B モデルは数秒で 1,000 トークンを生成、コード書き換えは GPT-4o を超える、OpenAI が投資したコード成果物である Cursor チームによる Jun 13, 2024 pm 03:47 PM

70B モデルでは、数秒で 1,000 個のトークンを生成でき、これはほぼ 4,000 文字に相当します。研究者らは Llama3 を微調整し、高速化アルゴリズムを導入しました。ネイティブ バージョンと比較して、速度は 13 倍高速になりました。速いだけでなく、コード書き換えタスクのパフォーマンスは GPT-4o をも上回ります。この成果は、人気の AI プログラミング成果物 Cursor を開発したチーム、anysphere によるもので、OpenAI も投資に参加しました。有名な高速推論アクセラレーション フレームワークである Groq では、70BLlama3 の推論速度は 1 秒あたり 300 トークンを超える程度であることを知っておく必要があります。 Cursor の速度により、ほぼ瞬時に完全なコード ファイル編集を実現すると言えます。カースと言うと良い奴だと言う人もいる

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

See all articles