您現在的位置是:電腦技術吧?>? 基礎知識 ??>??無法解決的問題下還有八種解決方案,下淋最快的解決方案??>??正文詳情

無法解決的問題下還有八種解決方案,下淋最快的解決方案

革冷菱2019-12-20 17:22:24 人圍觀
簡介技術方案和解決方案目前,大多數使用MySQL的網站同時使用Memcache作為密鑰值緩存。盡管這種架構非常流行,并且有很多成功的案例,但它過于依賴Memcache,這實際上使Me問題解決方案格式

目前使用MySQL的網站,多半同時使用Memcache作為鍵值緩存。

雖然這樣的架構極其流行,有眾多成功的案例,但過于依賴Memcache,無形中讓Memcache成為故障的根源:Memcache數據一致性的問題:當MySQL數據變化后,如果不能及時有效的清理掉過期的數據,就會造成數據不一致。

這在強調即時性的Web2.0時代,不可取。

Memcache崩潰后的雪崩效應:作為緩存的Memcache一旦崩潰,MySQL很可能在短時間內承受高負載而宕機。

據說前段時間新浪微博就遭遇了這樣的問題。

注:關于清理過期數據的問題,可以在程序架構上想辦法,如果數據操作有統一DAO封裝的話,可以利用Observer模式來清理過期數據,非主題內容,資料自查。

面對這些問題,HandlerSocket項目是個不錯的解決方案,它通過插件的方式賦予MySQL完整的NoSQL功能,從原理上講,它跳過MySQL中最耗時的語法解析,查詢計劃等步驟,直接讀取數據,如果內存夠大,能裝下索引,MySQL的查詢效率能提高若干倍!性能測試實例:Using MySQL as a NoSQL A story for exceeding 750,000 qps (GFW)因為HandlerSocket的性能足夠好,所以就沒有必要使用Memcache了,能節省大量的硬件資源,相當低碳!而且HandlerSocket操作的是MySQL放在內存中的索引,沒有額外的緩存,所以自然就不存在數據一致性的問題。

安裝如果使用Percona Server版本的MySQL就簡單了,因為它已經內置了HandlerSocket支持,不過考慮到其內置的版本不夠新,存在一些早已修復的BUG,所以最好采用源代碼編譯。

官方已經有了一份簡單的安裝文檔,但在我實際安裝時,遇到了一些其他未說明的問題,所以這里就把相應的安裝過程再寫一遍。

首先要確保已經安裝了MySQL5.1以上的版本,我用的是Ubuntu操作系統,事先已經用apt安裝了MySQL5.1.37,同時還需要相應的mysql_config,如果是Ubuntu的話,可以: shell aptitude install libmysqld-dev 注:如果你用的MySQL是從源代碼編譯的或官方提供的二進制版本,可以略過此步。

接著下載一份和系統MySQL版本一致的MySQL源代碼和HandlerSocket源代碼:mysql-5.1.37.tar.gzahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz shell tar zxf mysql-5.1.37.tar.gz shell tar zxf ahiguti-HandlerSocket-Plugin-for-MySQL-1.0.6-76-gf5f7443.tar.gz shell cd ahiguti-HandlerSocket-Plugin-for-MySQL-f5f7443 shell ./autogen.sh shell ./configure --with-mysql-source=../mysql-5.1.37 --with-mysql-bindir=/usr/bin --with-mysql-plugindir=/usr/lib/mysql/plugin 其中的參數含義如下:with-mysql-source表示MySQL源代碼目錄,with-mysql-bindir表示MySQL二進制可執行文件目錄(也就是mysql_config所在目錄),with-mysql-plugindir表示MySQL插件目錄,如果不清楚這個目錄在哪,可以按如下方法查詢: mysql SHOW VARIABLES LIKE 'plugin%'; --------------- ----------------------- | Variable_name | Value | --------------- ----------------------- | plugin_dir | /usr/lib/mysql/plugin | --------------- ----------------------- 運行命令后,如果你使用的是MySQL5.1.37版本的話,會遇到如下錯誤信息:MySQL source version does not match MySQL binary version明明我們的MySQL源代碼版本和二進制版本都是5.1.37,為什么還會出現這個錯誤呢?

通過查詢HandlerSocket的編譯腳本,發現原來它會檢索MySQL源代碼目錄中的VERSION文件,可MySQL5.1.37的源代碼目錄里不知何故竟然沒有這個文件,所以就報錯了,既然知道了原因,那我們就照貓畫虎做一個VERSION文件放到MySQL源代碼目錄,內容如下: MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=1 MYSQL_VERSION_PATCH=37 MYSQL_VERSION_EXTRA= 再次運行configure腳本,應該就OK了,把剩下的步驟進行完: shell make shell make install 接著需要配置一下HandlerSocket,編輯MySQL配置文件,加入如下內容: [mysqld] loose_handlersocket_port = 9998 # the port number to bind to (for read requests) loose_handlersocket_port_wr = 9999 # the port number to bind to (for write requests) loose_handlersocket_threads = 16 # the number of worker threads (for read requests) loose_handlersocket_threads_wr = 1 # the number of worker threads (for write requests) open_files_limit = 65535 # to allow handlersocket accept many concurrent # connections, make open_files_limit as large as # possible. 此外,InnoDB的innodb_buffer_pool_size,或MyISAM的key_buffy_size等關系到緩存索引的選項盡可能設置大一些,這樣才能發揮HandlerSocket的潛力。

注:apt包管理下的配置文件一般是/etc/mysql/my.cnf,否則一般是/etc/my.cnf最后登陸MySQL并激活HandlerSocket插件: mysql INSTALL PLUGIN handlersocket soname 'handlersocket.so'; 如果沒有問題的話,就能在MySQL里看到HandlerSocket的線程了: mysql SHOW PROCESSLIST; 也可以通過查詢剛配置的端口是否已經被MySQL占用來確認是否安裝成功: shell lsof -i :9998 shell lsof -i :9999 完活兒!現在你的MySQL已經具備NoSQL的能力了!實戰首先創建一個測試用的表: CREATE TABLE IF NOT EXISTS `test`.`t` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `a` varchar(10) NOT NULL, `b` varchar(10) NOT NULL, PRIMARY KEY (`id`), KEY `a_b` (`a`,`b`) ) ENGINE=InnoDB; 注:理論上HandlerSocket支持MyISAM,InnoDB等各種引擎,不過推薦使用InnoDB。

HandlerSocket的協議非常簡單,指令通過TAB分割,一行就是一個請求。

打開索引:P 索引標識 數據庫 表 索引 字段插入數據:索引標識 參數個數 參數1 參數N讀取數據:索引標識 操作 參數個數 參數1 參數N 條數 偏移SQL原型:INSERT INTO test.t (id, a, b) VALUES (1, a1, b1), (2, a2, b2) shell telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. P 1 test t PRIMARY id,a,b 0 1 1 3 1 a1 b1 0 1 0 1 3 2 a2 b2 0 1 0 注:使用HandlerSocket時,因為沒有實際運行SQL,所以Binlog記錄的是Row格式。

SQL原型:SELECT id, a, b FROM test.t WHERE id = 1 LIMIT 1 shell telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. P 1 test t PRIMARY id,a,b 0 1 1 = 1 1 1 0 0 3 1 a1 b1 SQL原型:SELECT id, a, b FROM test.t WHERE id =1 LIMIT 2 shell telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. P 1 test t PRIMARY id,a,b 0 1 1 = 1 1 2 0 0 3 1 a1 b1 2 a2 b2 SQL原型:SELECT id, a, b FROM test.t WHERE a = a1 AND b = b1 LIMIT 1 shell telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. P 1 test t a_b id,a,b 0 1 1 = 2 a1 b1 1 0 0 3 1 a1 b1 對HandlerSocket一個常見的誤解是只能執行PRIMARY類型的KV查詢,實際上只要支持索引,一般的簡單查詢它都能勝任,篇幅所限,這里就不多說了,如果你覺得直接操作telnet有些吃力,也可以使用自己熟悉的客戶端來測試,官方文檔里有介紹。

版權聲明:本文由 革冷菱 整理編輯。

原標題:下淋了怎么快速解決,八下人教版歷史問題解決方案答案

轉載注明出處:http://www.dn9ww09s.icu/basics/15598.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • const extern,extern static

    const extern,extern static 相關圖片extern說明本文主要介紹如何在開發中使用常量、靜態和外部關鍵字。如果你喜歡我的文章,你可以關注我的微博:你可以到曉瑤閣來了解我們的iOS培訓課程。稍后將更新更多內容。。。...

  • 怎樣獲取select的值,獲取select2選中的值

    怎樣獲取select的值,獲取select2選中的值 相關圖片jsp獲取select選中的值本文的示例描述了JavaScript獲取select值的方法。與您分享以供參考。具體分析如下:1。顯示的漢字編碼如下:document.getelementbyselect下拉框提交值...

  • sql刪除重復數據,如何刪除重復數據

    sql刪除重復數據,如何刪除重復數據 相關圖片oracle恢復刪除的表有很多方法可以刪除Internet上的重復數據,例如delete from prod,grid,Inc其中ROWID in(選擇b.row,Id2 from(選表格刪除重復項...

  • 眼鏡框制作,手機中框和邊框的區別

    眼鏡框制作,手機中框和邊框的區別 相關圖片門窗框的固定方法在從ios8升級到ios9的過程中,彈出提示框的方式發生了很大的變化。在xcode7和ios9.0的SDK中,已經明確表示不再推薦使用UIAlertView,只怎樣調眼鏡框...

  • asp連接oracle數據庫,pl/sql developer

    asp連接oracle數據庫,pl/sql developer 相關圖片Oracle10g本文主要介紹了使用ODP的asp.net防注入登錄驗證程序,即Oracle連接方式。您可以參考Internet上許多SQL連接模式的登錄驗證,但是如果沒有Oracas和casshiro比較...

  • 如何保持狀態,保持好狀態

    如何保持狀態,保持好狀態 相關圖片如何讓自己保持穩定的狀態net提供了session對象,它允許程序員識別、存儲和處理來自同一瀏覽器對象的多個請求的上下文信息,并將其發送到服務器上的特定網絡應用程序。會話對應于...

  • php for android,android運行php

    php for android,android運行php 相關圖片android php服務器下面是一個PHP如何判斷Android、IOS或WP是否會訪問網站的示例。這很實用,我希望能對你有所幫助。在PHP中,我們可以使用$_server['http_php開發安卓...

  • iOS發布流程,ios流程軟件

    iOS發布流程,ios流程軟件 相關圖片蘋果app開發流程我認為GIT進程在IOS開發中的優勢不需要詳細解釋。這和SVN的不一樣。過去,我經常通過拖拽文件的方式,讓很多人來配合開發。--! 我不想在這里討論一些基本的命iosapp上...

  • %c,8c

    %c,8c 相關圖片c-5最簡單的方法是導出頁面上的所有內容,并在加載時調用它。請注意,頁面上不能有其他控件,包括button void converttoexcel(){響應。Cleac哩...

  • 緩沖區溢出漏洞解決方案,文件上傳漏洞解決方案

    緩沖區溢出漏洞解決方案,文件上傳漏洞解決方案 相關圖片文件上傳漏洞原理在網站建設初期,很多網站都會將密碼放入數據庫,在登錄驗證時使用SQL=select*from user where user name='username'和p文件包含漏洞繞過技巧...

熱評文章

  • excel人民幣大寫函數,人民幣大寫公式

    excel人民幣大寫函數,人民幣大寫公式 相關圖片excel數字轉人民幣大寫SQL server函數將人民幣數字轉換為大寫形式的創建函數[dbo]。[f﹣num﹣(@num numeric(14,5))返回帶加密的varchar(100電子表格人民幣大寫函數...

  • 本年累計余額怎么算,養老保險累計賬戶余額

    本年累計余額怎么算,養老保險累計賬戶余額 相關圖片銀行日記賬的本年累計怎么算財務人員手工記賬時,會有借貸后的余額,即累計余額,即每個科目后記錄余額。如果使用計算機記賬,可以查詢完成累計余額的計算。首先,創建一個表...

  • 如何設置服務器ip地址,服務器ip地址大全

    如何設置服務器ip地址,服務器ip地址大全 相關圖片查詢app服務器ip地址本文給出了一個用PHP獲取服務器IP地址的實例。與您分享以供參考。具體分析如下:在PHP中,我們通常使用$_server['http_host']在URL中獲取時間同步服務器ip地址...

  • ADO.NET,NET是什么

    ADO.NET,NET是什么 相關圖片futurenet在使用ASP時,我們經常使用第三方控件來實現一些圖像功能。現在,隨著asp.net的引入,我們不再需要使用第三方控件來實現它,因為asp.net具有強大的功能來net開源框架...

  • g04編程實例,g03編程實例

    g04編程實例,g03編程實例 相關圖片數控車編程實例注解Java服務器頁面(JSP)作為一種構建動態web頁面的技術,正變得越來越流行。JSP不同于ASP、PHP和工作機制。通常,JSP頁面是在執行時編譯而不是解釋的數控車g03編程實...

  • ios是誰開發的,ios用什么開發

    ios是誰開發的,ios用什么開發 相關圖片ios開發難嗎Fmdb是面向對象的。它以OC的形式封裝SQLite的C語言API。它使用方便,不需要太多的數據庫操作知識。但也存在一些問題,比如跨平臺。因為它是用OC語言封裝ios 開發教程...

  • 證書異常怎么解決方法,模塊異常4怎么解決

    證書異常怎么解決方法,模塊異常4怎么解決 相關圖片如何能解除模塊異常1在IIS6中同時啟用了asp.net 2.0和asp.net 4.0之后,網站程序可能會發生以下錯誤:system.web.httpexception:pathqq綁卡異常怎么解決...

  • 一波又一波,一波還來不及

    一波又一波,一波還來不及 相關圖片一波接一波本文主要介紹了一種實用的bash shell排序方法,它適用于Ubuntu和其他Debian-Linux系統。您可以將以下內容作為朋友的命令行資源管理器。你可能來一波是什么意思...

  • kotlin android開發,安卓開發框架

    kotlin android開發,安卓開發框架 相關圖片android開發語言本文主要介紹Android開發的IDE、ADT、SDK、JDK、NDK等術語的定義。對這些概念感到困惑是件痛苦的事。本文簡要說明了這些術語的含義。讓我們共同努力android系統...

  • excel的工作簿是,excel多個工作簿匯總

    excel的工作簿是,excel多個工作簿匯總 相關圖片excel批量合并工作簿學校希望以Excel文件的形式提交校友記錄中收集到的校友電子郵件地址,方便校友團體向全體校友發出參加校慶80周年的邀請。校友記錄數據庫是access mdb格式一個工作...

關注微信

变脸官网查询