NoSQL架构实践(一)以NoSQL为辅_MySQL
(一)NoSQL作为镜像
不改变原有的以MySQL作为存储的架构,使用NoSQL作为辅助镜像存储,用NoSQL的优势辅助提升性能。
图 1 -NoSQL为镜像(代码完成模式 )
//写入数据的示例伪代码 //data为我们要存储的数据对象 data.title=”title”; data.name=”name”; data.time=”2009-12-01 10:10:01”; data.from=”1”; id=DB.Insert(data);//写入MySQL数据库 NoSQL.Add(id,data);//以写入MySQL产生的自增id为主键写入NoSQL数据库
如果有数据一致性要求,可以像如下的方式使用
//写入数据的示例伪代码 //data为我们要存储的数据对象 bool status=false; DB.startTransaction();//开始事务 id=DB.Insert(data);//写入MySQL数据库 if(id>0){ status=NoSQL.Add(id,data);//以写入MySQL产生的自增id为主键写入NoSQL数据库 } if(id>0 && status==true){ DB.commit();//提交事务 }else{ DB.rollback();//不成功,进行回滚 }
上面的代码看起来可能觉得有点麻烦,但是只需要在DB类或者ORM层做一个统一的封装,就能实现重用了,其他代码都不用做任何的修改。
这种架构在原有基于MySQL数据库的架构上增加了一层辅助的NoSQL存储,代码量不大,技术难度小,却在可扩展性和性能上起到了非常大的作用。只需要程序在写入MySQL数据库后,同时写入到NoSQL数据库,让MySQL和NoSQL拥有相同的镜像数据,在某些可以根据主键查询的地方,使用高效的NoSQL数据库查询,这样就节省了MySQL的查询,用NoSQL的高性能来抵挡这些查询。
图 2 -NoSQL为镜像(同步模式)
这种不通过程序代码,而是通过MySQL把数据同步到NoSQL中,这种模式是上面一种的变体,是一种对写入透明但是具有更高技术难度一种模式。这种模式适用于现有的比较复杂的老系统,通过修改代码不易实现,可能引起新的问题。同时也适用于需要把数据同步到多种类型的存储中。
MySQL到NoSQL同步的实现可以使用MySQL UDF函数,MySQL binlog的解析来实现。可以利用现有的开源项目来实现,比如:
- MySQL memcached UDFs:从通过UDF操作Memcached协议。
- 国内张宴开源的mysql-udf-http:通过UDF操作http协议。
有了这两个MySQL UDF函数库,我们就能通过MySQL透明的处理Memcached或者Http协议,这样只要有兼容Memcached或者Http协议的NoSQL数据库,那么我们就能通过MySQL去操作以进行同步数据。再结合lib_mysqludf_json,通过UDF和MySQL触发器功能的结合,就可以实现数据的自动同步。
(二)MySQL和NoSQL组合
MySQL中只存储需要查询的小字段,NoSQL存储所有数据。
图 3 -MySQL和NoSQL组合
//写入数据的示例伪代码 //data为我们要存储的数据对象 data.title=”title”; data.name=”name”; data.time=”2009-12-01 10:10:01”;data.from=”1”;bool status=false; DB.startTransaction();//开始事务 id=DB.Insert(“INSERT INTO table (from) VALUES(data.from)”);//写入MySQL数据库,只写from需要where查询的字段 if(id>0){ status=NoSQL.Add(id,data);//以写入MySQL产生的自增id为主键写入NoSQL数据库 } if(id>0 && status==true){ DB.commit();//提交事务 }else{ DB.rollback();//不成功,进行回滚 }
把需要查询的字段,一般都是数字,时间等类型的小字段存储于MySQL中,根据查询建立相应的索引,其他不需要的字段,包括大文本字段都存储在NoSQL中。在查询的时候,我们先从MySQL中查询出数据的主键,然后从NoSQL中直接取出对应的数据即可。
这种架构模式把MySQL和NoSQL的作用进行了融合,各司其职,让MySQL专门负责处理擅长的关系存储,NoSQL作为数据的存储。它有以下优点:
- 节省MySQL的IO开销。由于MySQL只存储需要查询的小字段,不再负责存储大文本字段,这样就可以节省MySQL存储的空间开销,从而节省MySQL的磁盘IO。我们曾经通过这种优化,把MySQL一个40G的表缩减到几百M。
- 提高MySQl Query Cache缓存命中率。我们知道query cache缓存失效是表级的,在MySQL表一旦被更新就会失效,经过这种字段的分离,更新的字段如果不是存储在MySQL中,那么对query cache就没有任何影响。而NoSQL的Cache往往都是行级别的,只对更新的记录的缓存失效。
- 提升MySQL主从同步效率。由于MySQL存储空间的减小,同步的数据记录也减小了,而部分数据的更新落在NoSQL而不是MySQL,这样也减少了MySQL数据需要同步的次数。
- 提高MySQL数据备份和恢复的速度。由于MySQL数据库存储的数据的减小,很容易看到数据备份和恢复的速度也将极大的提高。
- 比以前更容易扩展。NoSQL天生就容易扩展。经过这种优化,MySQL性能也得到提高。
比如手机凤凰网就是这种架构 http://www.cnblogs.com/sunli/archive/2010/12/20/imcp.html

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Vue3+TS+Vite開發技巧:如何進行資料加密和儲存隨著網路技術的快速發展,資料的安全性和隱私保護變得越來越重要。在Vue3+TS+Vite開發環境下,如何進行資料加密和存儲,是每個開發人員都需要面對的問題。本文將介紹一些常用的資料加密和儲存的技巧,幫助開發人員提升應用程式的安全性和使用者體驗。一、資料加密前端資料加密前端加密是保護資料安全性的重要一環。常用

本站3月7日訊息,華為資料儲存產品線總裁週躍峰博士日前出席MWC2024大會,專門展示了為溫資料(WarmData)和冷資料(ColdData)設計的新一代OceanStorArctic磁電儲存解決方案。華為資料儲存產品線總裁週躍峰發布系列創新解決方案圖來源:華為本站附上華為官方新聞稿內容如下:該方案的成本比磁帶低20%,功耗比硬碟低90%。根據國外科技媒體blocksandfiles報道,華為發言人也透露了關於該磁電儲存解決方案的資訊:華為的磁電磁碟(MED)是對磁性儲存媒體的重大創新。第一代ME

什麼是緩存?快取(發音為ka·shay)是一種專門的高速硬體或軟體元件,用於儲存經常要求的資料和指令,這些資料和指令又可用於更快地載入網站、應用程式、服務和系統的其他部分。快取使最常存取的資料隨時可用。快取檔案與快取記憶體不同。快取文件是指經常需要的文件,如PNG、圖標、徽標、著色器等,多個程式可能需要這些文件。這些檔案儲存在您的實體磁碟機空間中,通常是隱藏的。另一方面,高速緩存記憶體是一種比主記憶體和/或RAM更快的記憶體類型。它極大地減少了資料存取時間,因為與RAM相比,它更靠近CPU並且速度

Git是一個快速、可靠、適應性強的分散式版本控制系統。它旨在支援分散式的非線性工作流程,使其成為各種規模的軟體開發團隊的理想選擇。每個Git工作目錄都是一個獨立的儲存庫,具有所有更改的完整歷史記錄,並且能夠追蹤版本,即使沒有網路存取或中央伺服器。 GitHub是託管在雲端的Git儲存庫,它提供了分散式修訂控制的所有功能。 GitHub是Git的儲存庫,託管在雲端。與作為CLI工具的Git不同,GitHub有一個基於Web的圖形使用者介面。它用於版本控制,這涉及與其他開發人員協作,並追蹤隨時間推移對腳本和

PHP和swoole如何實現高效率的資料快取和儲存?概述:在Web應用開發中,資料的快取和儲存是非常重要的一部分。而PHP和swoole提供了一種高效率的方法來實現資料的快取與儲存。本文將介紹如何使用PHP和swoole來實現高效的資料快取和存儲,並給出相應的程式碼範例。一、swoole簡介:swoole是一個針對PHP語言開發的,高效能的非同步網路通訊引擎,它可以

如何正確使用sessionStorage儲存敏感訊息,需要具體程式碼範例無論是在Web開發或行動應用程式開發中,我們常常需要儲存和處理敏感訊息,如使用者登入憑證、身分證號碼等。在前端開發中,使用sessionStorage是常見的儲存方案。然而,由於sessionStorage是基於瀏覽器的存儲,需要注意一些安全性的問題,以確保存儲的敏感資訊不會被惡意存取和利用

本文轉載自微信公眾號「活在資訊時代」,作者活在資訊時代。轉載本文請聯絡活在資訊時代公眾號。對於熟悉資料庫操作的同學來說,編寫優美的SQL語句,從資料庫中想辦法找出自己需要的數據,是常規操作了。而對於熟悉機器學習的同學來說,獲取數據,對數據進行預處理,建立模型,確定訓練集和測試集,用訓練好的模型對未來進行一系列的預測,也是一種常規操作了。那麼,我們能否將兩種技術結合起來呢?我們看到資料庫裡儲存了數據,而進行預測需要基於以往的數據。如果我們透過資料庫裡現有的數據,對於未來的數據進行查詢的話,那麼是

Java集合框架概述Java集合框架是Java程式語言的重要組成部分,它提供了一系列可以儲存和管理資料的容器類別庫。這些容器類別庫具有不同的資料結構,可以滿足不同場景下的資料儲存和處理需求。集合框架的優點在於它提供了統一的接口,使得開發人員可以使用相同的方式來操作不同的容器類別庫,從而降低了開發難度。 Java集合框架的資料結構Java集合框架中包含多種資料結構,每種資料結構都有其獨特的特性和適用場景。以下是幾種常見的Java集合框架資料結構:1.List:List是一個有序的集合,它允許元素重複。 Li
