針對快取在Redis中的聊天訊息的持久化方案分析

2022-02-02 09:50:22 字數 2455 閱讀 8208

資料庫的選型主要考慮一下幾個方面:

由於此資料庫主要用來儲存快取在redis中的使用者傳送的訊息,對使用者傳送的訊息進行持久化,主要用作以後的分析與查詢,本身業務價值不大。redis資料的儲存方式為 key-value。本來通過對常用的關係型資料庫與非關係型資料庫進行對比分析,選擇適合本業務需求的最佳資料庫。

對關係型資料庫的分析主要分析sqlserver 、oracle、mysql

sqlserver只能在windows上執行,所以不做考慮。

引入了共享sql和多線索伺服器體系結構。這減少了oracle的資源占用,並增強了oracle的能力,使之在低檔軟硬體平台上用較少的資源就可以支援更多的使用者

提供了基於角色(role)分工的安全保密管理。在資料庫管理功能、完整性檢查、安全性、一致性方面都有良好的表現。

支援大量多**資料,如二進位制圖形、聲音、動畫以及多維資料結構等。

提供了新的分布式資料庫能力。可通過網路較方便地讀寫遠端資料庫裡的資料,並有對稱複製的技術。

費用較高

管理維護成本高

對硬體的要求很高

對管理員經驗、經驗要求很高

資料庫崩潰後恢復比較困難

mysql是免費開源的

mysql是可以定製的,採用了gpl協議,你可以修改原始碼來開發自己的mysql系統

mysql不僅能夠作為乙個單獨的應用程式應用在客戶端伺服器網路環境中,也能作為乙個庫而嵌入到其他的軟體中

支援多執行緒,使cpu資源得到充分利用

支援特大型的資料庫。

使用c和c++程式語言編寫,且可以使用多種編譯器進行測試,保證源**的可移植性,安裝簡單小巧

提供用於管理、檢查、優化資料庫操作的管理工具

mysql在穩定性和集群方面存在一些問題。除非使用收費版本

完全免費的mysql安裝集群式非常困難的。

當表資料非常大時,修改表資料結構會鎖定整個表結構

由於chat的業務需求為持久化快取在resis中的使用者互動資訊。因此詳細介紹面向文件的資料庫 mongodb,mongodb中的文件類似於json物件。

mongodb是乙個基於分布式檔案儲存的開源資料庫系統。在高負載的情況下,新增更多的節點,可以保證伺服器效能。mongodb旨在為web應用提供可擴充套件的高效能資料儲存解決方案。mongodb將資料儲存為乙個文件,資料結構有鍵值(key=>value)對組成。mongodb文件類似於json物件。字段值可以包含其他文件,陣列及文件陣列。

mongodb可以實現範圍查詢、資料集包含查詢、不等式查詢,以及其他一些查詢。

可以通過mongodb對資料進行分析並加以利用,mongodb提供的聚合工具有:聚合框架、mapreduce、及幾個簡單的聚合命令:count、distinct和group

副本集 (將資料副本儲存到多台伺服器上)

自動分片(類似於關係型資料庫的分表)

mongodb除支援mysql的常用索引外,還支援ttl索引

自動清除:mongodb還提供了受限集合,當受限集合到達上限時,舊文件會被自動清除。如果想讓基於時間而不是整個集合的大小,可以用ttl索引

內建gridfs ,支援大容量儲存(gridfs是乙個出色的分布式檔案系統,可以支援海量的資料儲存)

寫入高效能:儲存引擎使用的記憶體對映檔案(mmap的方式),將記憶體管理工作交給作業系統去處理。mmap的機制,資料的操作寫記憶體即是寫磁碟,在保證資料一致性的前提下,提供了較高的效能。

易於擴充套件:mongodb支援自動分片(分片就是講資料拆分,將其分散存放在不同機器上的過程)。mongodb自動處理資料在分片上的分布,也更容易新增和刪除分片。

對非事務安全,mongodb很適合業務系統中有大量「低價值」資料的場景

無模式(不像關係型資料庫,先定義表結構)

mongodb不支援事務,對事務性有要求的應用程式不建議使用mongodb

在多個不同緯度上對不同型別的資料進行關聯,這是關係型資料庫最擅長的事情。

mongodb在58同城百億量級資料下的應用實踐

telefonica(西班牙電信公司) 如何使用mongodb 幫助數位化業務高速增長。

eharmony使用mongodb技術將匹配演算法縮短到95%

sap sap lumira

參考文件:

通過以上的對比分析,我們在mysql 和 mongodb中選擇適合我們的資料庫。

資料庫型別

是否收費

集群搭建

資料儲存

業務關聯

是否支援事務

mysql

免費開源

免費開源搭建集群非常困難,mysql集群收費

以行、列形式儲存

支援多表關聯

支援事務

mongodb

免費開源

集群搭建非常容易,並自持自動分片

以類似於json的形式儲存,非常適合web開發

不支援表關聯

不支援事務

業務場景資料

通過以上分析:選擇mongodb作為chat訊息的持久化

Redis快取在Spring的使用

思路很簡單,就是在查詢資料的時候,先檢查redis資料庫中有沒有,要是有就把它拿出來,沒有就先從mysql中取出來,再存到redis中。主要是利用aop的advisor在查mysql之前做一下判斷。具體的專案位址 具體請看 1.新增依賴 org.springframework.data spring...

Etag快取在PHP和NodeJS中的實現

http 提供了許多頁面快取的方案,其中屬 etag 和 last modified 應用最廣。本文會先介紹 etag 的應用場景,然後說說他在 php 和 node 中的使用。客戶端和瀏覽器之間的互動 1 2 200,ok 客 3 etag 服 戶 4 304 務 端 3 強制重新整理 端 6 2...

簡單實現Redis快取中的排序功能

1.在實現快取排序功能之前,必須先明白這一功能的合理性。不妨思考一下,既然可以在資料庫中排序,為什麼還要把排序功能放在快取中實現呢?這裡簡單總結了兩個原因 首先,排序會增加資料庫的負載,難以支撐高併發的應用 其次,在快取中排序不會遇到表鎖定的問題。redis恰好提供了排序功能,使我們可以方便地實現快...