Hbase入門6 -白話MySQL(RDBMS)與HBase之間
Jun 07, 2016 pm 04:26 PM我的廢話1: 任何一項新技術(shù)并非救命稻草,一抹一擦立馬藥到病除的百寶箱,并非使用Spring或者NOSQL的產(chǎn)品就神乎其神+五光十色,如果那樣基本是扯淡。同類 型產(chǎn)品中不管那種技術(shù)最終要達(dá)到的目的是一樣的,通過新的技術(shù)手段你往往可能避諱了當(dāng)前你所需要面對
我的廢話1:
?? 任何一項新技術(shù)并非救命稻草,一抹一擦立馬藥到病除的百寶箱,并非使用Spring或者NOSQL的產(chǎn)品就神乎其神+五光十色,如果那樣基本是扯淡。同類 型產(chǎn)品中不管那種技術(shù)最終要達(dá)到的目的是一樣的,通過新的技術(shù)手段你往往可能避諱了當(dāng)前你所需要面對的問題,但過后新的問題又來了。也許回過頭來看看還不 如在原來的基礎(chǔ)上多動動腦筋 想想辦法 做些改良可以得到更高的回報。??
?
?? 傳統(tǒng)數(shù)據(jù)庫是以數(shù)據(jù)塊來存儲數(shù)據(jù),簡單來說,你的表字段越多,占用的數(shù)據(jù)空間就越多,那么查詢有可能就要跨數(shù)據(jù)塊,將會導(dǎo)致查詢的速度變慢。在大型系統(tǒng)中一張表上百個字段,并且表中的數(shù)據(jù)上億條這是完全是有可能的。因此會帶來數(shù)據(jù)庫查詢的瓶頸。我們都知道一個常識數(shù)據(jù)庫中表記錄的多少對查詢的性能有非常大的影響,此時你很有可能想到分表、分庫的做法來分載數(shù)據(jù)庫運(yùn)算的壓力,那么又會帶來新的問題,例如:分布式事務(wù)、全局唯一ID的生成、跨數(shù)據(jù)庫查詢 等,依舊會讓你面對棘手的問題。如果打破這種按照行存儲的模式,采用一種基于列存儲的模式,對于大規(guī)模數(shù)據(jù)場景這樣情況有可能發(fā)生一些好轉(zhuǎn)。由于查詢中的選擇規(guī)則是通過列來定義的,因此整個數(shù)據(jù)庫是自動索引化的。按列存儲每個字段的數(shù)據(jù)聚集存儲, 可以動態(tài)增加,并且列為空就不存儲數(shù)據(jù),節(jié)省存儲空間。 每個字段的數(shù)據(jù)按照聚集存儲,能大大減少讀取的數(shù)據(jù)量,查詢時指哪打哪,來的更直接。無需考慮分庫、分表 Hbase將對存儲的數(shù)據(jù)自動切分?jǐn)?shù)據(jù),并支持高并發(fā)讀寫操作,使得海量數(shù)據(jù)存儲自動具有更強(qiáng)的擴(kuò)展性。
?? Java中的HashMap是Key/Value的結(jié)構(gòu),你也可以把HBase的數(shù)據(jù)結(jié)構(gòu)看做是一個Key/Value的體系,話說HBase的區(qū)域由表名和行界定的。在HBase區(qū)域每一個"列族"都由一個名為HStore的對象管理。每個HStore由一個或多個MapFiles(Hadoop中的一個文件類型)組成。MapFiles的概念類似于Google的SSTable。 在Hbase里面有以下兩個主要的概念,Row key 和 Column Family,其次是Cell qualifier和Timestamp tuple,Column family我們通常稱之為“列族”,訪問控制、磁盤和內(nèi)存的使用統(tǒng)計都是在列族層面進(jìn)行的。列族Column family是之前預(yù)先定義好的數(shù)據(jù)模型,每一個Column Family都可以根據(jù)“限定符”有多個column。在HBase每個cell存儲單元對同一份數(shù)據(jù)有多個版本,根據(jù)唯一的時間戳來區(qū)分每個版本之間的差異,最新的數(shù)據(jù)版本排在最前面 。
口水:Hbase將table水平劃分成N個Region,region按column family劃分成Store,每個store包括內(nèi)存中的memstore和持久化到disk上的HFile。
上述可能我表達(dá)的還不夠到位,下面來看一個實踐中的場景,將原來是存放在MySQL中Blog中的數(shù)據(jù)遷移到HBase中的過程:
MySQL中現(xiàn)有的表結(jié)構(gòu):
遷移HBase中的表結(jié)構(gòu):
原來系統(tǒng)中有2張表blogtable和comment表,采用HBase后只有一張blogtable表,如果按照傳統(tǒng)的RDBMS的話,blogtable表中的列是固定的,比如schema 定義了Author,Title,URL,text等屬性,上線后表字段是不能動態(tài)增加的。但是如果采用列存儲系統(tǒng),比如Hbase,那么我們可以定義blogtable表,然后定義info 列族,User的數(shù)據(jù)可以分為:info:title? ,info:author ,info:url 等,如果后來你又想增加另外的屬性,這樣很方便只需要 info:xxx 就可以了。
對于Row key你可以理解row key為傳統(tǒng)RDBMS中的某一個行的主鍵,Hbase是不支持條件查詢以及Order by等查詢,因此Row key的設(shè)計就要根據(jù)你系統(tǒng)的查詢需求來設(shè)計了額。 Hbase中的記錄是按照rowkey來排序的,這樣就使得查詢變得非常快。
具體操作過程如下:
============================創(chuàng)建blogtable表=========================
create 'blogtable', 'info','text','comment_title','comment_author','comment_text'
?
============================插入概要信息=========================
put 'blogtable', '1', 'info:title', 'this is doc title'
put 'blogtable', '1', 'info:author', 'javabloger'
put 'blogtable', '1', 'info:url', 'http://www.javabloger.com/index.php'
put 'blogtable', '2', 'info:title', 'this is doc title2'
put 'blogtable', '2', 'info:author', 'H.E.'
put 'blogtable', '2', 'info:url', 'http://www.javabloger.com/index.html'
============================插入正文信息=========================
put 'blogtable', '1', 'text:', 'what is this doc context ?'
put 'blogtable', '2', 'text:', 'what is this doc context2?'
==========================插入評論信息===============================
put 'blogtable', '1', 'comment_title:', 'this is doc comment_title '
put 'blogtable', '1', 'comment_author:', 'javabloger'
put 'blogtable', '1', 'comment_text:', 'this is nice doc'
put 'blogtable', '2', 'comment_title:', 'this is blog comment_title '
put 'blogtable', '2', 'comment_author:', 'H.E.'
put 'blogtable', '2', 'comment_text:', 'this is nice blog'
HBase的數(shù)據(jù)查詢\讀取,可以通過單個row key訪問,row key的range和全表掃描,大致如下:
注意:HBase不能支持where條件、Order by 查詢,只支持按照Row key來查詢,但是可以通過HBase提供的API進(jìn)行條件過濾。
例如:http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
scan 'blogtable' ,{COLUMNS => ['text:','info:title'] }? —> 列出 文章的內(nèi)容和標(biāo)題
scan 'blogtable' , {COLUMNS => 'info:url' , STARTROW => '2'}??? —> 根據(jù)范圍列出 文章的內(nèi)容和標(biāo)題
get 'blogtable','1'??? —> 列出 文章id 等于1的數(shù)據(jù)
get 'blogtable','1', {COLUMN => 'info'}??? —> 列出 文章id 等于1 的 info 的頭(Head)內(nèi)容
get 'blogtable','1', {COLUMN => 'text'}?? —> 列出 文章id 等于1 的 text? 的具體(Body)內(nèi)容
get 'blogtable','1', {COLUMN => ['text','info:author']}? —> 列出 文章id 等于1 的內(nèi)容和作者(Body/Author)內(nèi)容
我的廢話2:
?? 有人會問Java Web服務(wù)器中是Tomcat快還是GlassFish快?小型數(shù)據(jù)庫中是MySQL效率高還是MS-SQL效率高?我看是關(guān)鍵用在什么場景和怎么使用這 個產(chǎn)品(技術(shù)),所以我漸漸的認(rèn)為是需要對產(chǎn)品、技術(shù)本身深入的了解,而并非一項新的技術(shù)就是絕佳的選擇。試問:Tomcat的默認(rèn)的運(yùn)行參數(shù)能和我們線 上正在使用的GlassFish性能相提并論嗎?我不相信GlassFishv2和GlassFishv3在默認(rèn)的配置參數(shù)下有顯著的差別。我們需要對產(chǎn) 品本身做到深入的了解才能發(fā)揮他最高的性能,而并非感觀聽從廠家的廣告和自己的感性認(rèn)識 迷信哪個產(chǎn)品的優(yōu)越性。
我的廢話3:
? 對于NOSQL這樣的新技術(shù),的的確確是可以解決過去我們所需要面對的問題,但也并非適合每個應(yīng)用場景,所以在使用新產(chǎn)品的同時需要切合當(dāng)前的產(chǎn)品需要, 是需求在引導(dǎo)新技術(shù)的投入,而并非為了趕時髦去使用他。你的產(chǎn)品是否過硬不是你使用了什么新技術(shù),用戶關(guān)心的是速度和穩(wěn)定性,不會關(guān)心你是否使用了 NOSQL。相反Google有著超大的數(shù)據(jù)量,能給全世界用戶帶來了驚人的速度和準(zhǔn)確性,大家才會回過頭來好奇Google到底是怎么做到的。所以根據(jù) 自己的需要千萬別太勉強(qiáng)自己使用了某項新技術(shù)。
我的廢話4:
? 總之一句話,用什么不是最關(guān)鍵,最關(guān)鍵是怎么去使用!
?
相關(guān)文章:
Lily-建立在HBase上的分布式搜索
MySQL向Hive/HBase的遷移工具
HBase入門5(集群) -壓力分載與失效轉(zhuǎn)發(fā)
Hive入門3–Hive與HBase的整合
HBase入門篇4
HBase入門篇3
HBase入門篇2-Java操作HBase例子
HBase入門篇
基于Hbase存儲的分布式消息(IM)系統(tǒng)-JABase
–end–
原文地址:Hbase入門6 -白話MySQL(RDBMS)與HBase之間, 感謝原作者分享。

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

1. 2. Prestasi tinggi memerlukan pergantungan pada cache (redis), pengoptimuman pangkalan data, CDN dan giliran tak segerak; 3. Keselamatan mesti dilakukan dengan penapisan input, perlindungan CSRF, HTTPS, penyulitan kata laluan dan kawalan kebenaran; 4. Pengiklanan pilihan wang, langganan ahli, ganjaran, komisen, pembayaran pengetahuan dan model lain, terasnya adalah untuk memadankan nada komuniti dan keperluan pengguna.

Terdapat tiga cara utama untuk menetapkan pembolehubah persekitaran dalam PHP: 1. Konfigurasi global melalui php.ini; 2. Melalui pelayan web (seperti setenv Apache atau fastcgi_param of nginx); 3. Gunakan fungsi Putenv () dalam skrip PHP. Antaranya, php.ini sesuai untuk konfigurasi global dan jarang mengubah konfigurasi, konfigurasi pelayan web sesuai untuk senario yang perlu diasingkan, dan putenv () sesuai untuk pembolehubah sementara. Dasar kegigihan termasuk fail konfigurasi (seperti php.ini atau konfigurasi pelayan web), fail .Env dimuatkan dengan perpustakaan dotenv, dan suntikan dinamik pembolehubah dalam proses CI/CD. Maklumat sensitif pengurusan keselamatan harus dielakkan dengan keras, dan disyorkan untuk digunakan.

Untuk mengumpul data tingkah laku pengguna, anda perlu merakam pelayaran, mencari, membeli dan maklumat lain ke dalam pangkalan data melalui PHP, dan membersihkan dan menganalisisnya untuk meneroka keutamaan minat; 2. Pemilihan algoritma cadangan harus ditentukan berdasarkan ciri -ciri data: berdasarkan kandungan, penapisan kolaboratif, peraturan atau cadangan campuran; 3. Penapisan kolaboratif boleh dilaksanakan di PHP untuk mengira kesamaan kosinus pengguna, pilih K jiran terdekat, skor ramalan berwajaran dan mengesyorkan produk pemarkahan tinggi; 4. Penilaian prestasi menggunakan ketepatan, ingat, nilai F1 dan CTR, kadar penukaran dan sahkan kesan melalui ujian A/B; 5. Masalah permulaan sejuk boleh dikurangkan melalui atribut produk, maklumat pendaftaran pengguna, cadangan popular dan penilaian pakar; 6. Kaedah Pengoptimuman Prestasi termasuk hasil cadangan cache, pemprosesan tak segerak, pengkomputeran yang diedarkan dan pengoptimuman pertanyaan SQL, dengan itu meningkatkan kecekapan cadangan dan pengalaman pengguna.

Untuk mencapai automasi penempatan MySQL, kunci adalah menggunakan Terraform untuk menentukan sumber, konfigurasi pengurusan ansible, Git untuk kawalan versi, dan mengukuhkan pengurusan keselamatan dan kebenaran. 1. Gunakan Terraform untuk menentukan contoh MySQL, seperti versi, jenis, kawalan akses dan atribut sumber lain AWSRDS; 2. Gunakan AnsiblePlayBook untuk merealisasikan konfigurasi terperinci seperti penciptaan pengguna pangkalan data, tetapan kebenaran, dan lain -lain; 3. Semua fail konfigurasi dimasukkan dalam pengurusan Git, pengesanan perubahan sokongan dan pembangunan kolaboratif; 4. Elakkan maklumat sensitif keras, gunakan Vault atau Ansiblevault untuk menguruskan kata laluan, dan tetapkan kawalan akses dan prinsip kebenaran minimum.

Mengapa saya memerlukan penyulitan SSL/TLS MySQL Connection? Kerana sambungan yang tidak disulitkan boleh menyebabkan data sensitif dipintas, membolehkan SSL/TLS dapat menghalang serangan manusia-dalam-pertengahan dan memenuhi keperluan pematuhan; 2. Bagaimana untuk mengkonfigurasi SSL/TLS untuk MySQL? Anda perlu menjana sijil dan kunci peribadi, mengubah suai fail konfigurasi untuk menentukan laluan SSL-CA, SSL-CERT dan SSL dan memulakan semula perkhidmatan; 3. Bagaimana untuk memaksa SSL apabila pelanggan menghubungkan? Dilaksanakan dengan menyatakan keperluan atau keperluan yang diperlukan semasa membuat pengguna; 4. Butiran yang mudah diabaikan dalam konfigurasi SSL termasuk kebenaran laluan sijil, isu tamat sijil, dan keperluan konfigurasi pelanggan.

Apabila memilih rangka kerja PHP yang sesuai, anda perlu mempertimbangkan secara komprehensif mengikut keperluan projek: Laravel sesuai untuk pembangunan pesat dan menyediakan enjin template eloquentorm dan bilah, yang mudah untuk operasi pangkalan data dan rendering bentuk dinamik; Symfony lebih fleksibel dan sesuai untuk sistem kompleks; Codeigniter adalah ringan dan sesuai untuk aplikasi mudah dengan keperluan prestasi tinggi. 2. Untuk memastikan ketepatan model AI, kita perlu memulakan dengan latihan data berkualiti tinggi, pemilihan penunjuk penilaian yang munasabah (seperti ketepatan, penarikan balik, nilai F1), penilaian prestasi biasa dan penalaan model, dan memastikan kualiti kod melalui ujian unit dan ujian integrasi, sambil terus memantau data input untuk mencegah data drift. 3. Banyak langkah diperlukan untuk melindungi privasi pengguna: menyulitkan dan menyimpan data sensitif (seperti AES

PHP memainkan peranan penyambung dan pusat otak dalam perkhidmatan pelanggan pintar, yang bertanggungjawab untuk menyambungkan input depan, penyimpanan pangkalan data dan perkhidmatan AI luaran; 2. Apabila melaksanakannya, adalah perlu untuk membina seni bina berbilang lapisan: front-end menerima mesej pengguna, preprocesses dan permintaan PHP back-end permintaan, pertama sepadan dengan asas pengetahuan tempatan, dan terlepas, panggil perkhidmatan AI luaran seperti OpenAI atau Dialogflow untuk mendapatkan balasan pintar; 3. Pengurusan Sesi ditulis kepada MySQL dan pangkalan data lain oleh PHP untuk memastikan kesinambungan konteks; 4. Perkhidmatan AI bersepadu perlu menggunakan Guzzle untuk menghantar permintaan HTTP, selamat menyimpan Apikeys, dan melakukan kerja yang baik untuk pemprosesan ralat dan analisis tindak balas; 5. Reka bentuk pangkalan data mesti termasuk sesi, mesej, pangkalan pengetahuan, dan jadual pengguna, dengan munasabah membina indeks, memastikan keselamatan dan prestasi, dan menyokong memori robot

Untuk membolehkan bekas PHP menyokong pembinaan automatik, terasnya terletak pada mengkonfigurasi proses integrasi berterusan (CI). 1. Gunakan Dockerfile untuk menentukan persekitaran PHP, termasuk imej asas, pemasangan lanjutan, pengurusan ketergantungan dan tetapan kebenaran; 2. Konfigurasi alat CI/CD seperti Gitlabci, dan tentukan peringkat binaan, ujian dan penempatan melalui fail .gitlab-ci.yml untuk mencapai pembinaan, pengujian dan penggunaan automatik; 3. Mengintegrasikan kerangka ujian seperti PHPUnit untuk memastikan ujian secara automatik dijalankan selepas perubahan kod; 4. Gunakan strategi penempatan automatik seperti Kubernet untuk menentukan konfigurasi penempatan melalui fail penyebaran.yaml; 5. Mengoptimumkan Dockerfile dan mengamalkan pembinaan pelbagai peringkat
