標籤:Java
什麼是資料庫分區
簡單來說,就是指通過某種特定的條件,將我們存放在同一個資料庫中的資料分散存放到多個資料庫上面,以達到分散單台裝置負載的效果。
資料的切分(Sharding)根據其切分規則的類型,可以分為兩種切分模式。
1.一種是按照不同的表來切分到不同的資料庫(主機)之上,這種切可以稱之為資料的垂直切分
2.另外一種則是根據表中的資料的邏輯關係,將同一個表中的資料按照某種條件拆分到多台資料庫上面,這種切分稱之為資料的水平切分。
如何?資料庫分區
當資料庫分區後,資料由一個資料庫分散到多個資料庫中。此時系統要查詢時需要切換不同的資料庫進行查詢,那麼系統如何知道要查詢的資料在哪個資料庫中?當添加一條記錄時要向哪個資料庫中插入呢?這些問題處理起來都是非常的麻煩。
這種情況下可以使用一個資料庫中介軟體mycat來解決相關的問題。
什麼是Mycat?
簡單的說,MyCAT就是:一個新穎的資料庫中介軟體產品,支援mysql叢集,提供高可用性資料分區叢集。你可以像使用mysql一樣使用mycat。對於開發人員來說根本感覺不到mycat的存在。
Mycat讀寫分離
資料庫讀寫分離對於大型系統或者訪問量很高的互連網應用來說,是必不可少的一個重要功能。對於MySQL來說,標準的讀寫分離是主從模式,一個寫節點Master後面跟著多個讀節點,讀節點的數量取決於系統的壓力,通常是1-3個讀節點的配置
單點登入系統
主要解決的是Session共用的問題。
1、使用redis管理Session。
1)key:token
2)value:使用者資訊
3)可以需要設定有效期間。
4)需要把token儲存到cookie中。
購物車
1、未登入:使用cookie儲存購物車資料
2、登入後:把購物車資料儲存到redis。
2、購物車合并,應該以服務端的購物車為準。
電商活動倒計時方案:
1、確定一個基準時間。可以使用一個sql語句從資料庫中取出一個目前時間。SELECT NOW();
2、活動開始的時間是固定的。
3、使用活動開始時間-基準時間可以計算出一個秒為單位的數值。
4、在redis中設定一個key(活動開始標識)。設定key的到期時間為第三步計算出來的時間。
5、展示頁面的時候取出key的有效時間。Ttl命令。使用js倒計時。
6、一旦活動開始的key失效,說明活動開始。
7、需要在活動的邏輯中,先判斷活動是否開始。
秒殺方案:
8、把商品的數量放到redis中。
9、秒殺時使用decr命令對商品數量減一。如果不是負數說明搶到。
10、一旦返回數值變為0說明商品已售完。
由於宜立方商城是基於SOA的架構,表現層和服務層是不同的工程。所以要實現商品列表查詢需要兩個系統之間進行通訊。
如何?遠程通訊?
1、Webservice:效率不高基於soap協議。項目中不推薦使用。
2、使用restful形式的服務:http+json。很多項目中應用。如果服務太多,服務之間調用關係混亂,需要治療服務。
3、使用dubbo。使用rpc協議進行遠程調用,直接使用socket通訊。傳輸效率高,並且可以統計出系統之間的調用關係、調用次數。
什麼是dubbo
DUBBO是一個分布式服務架構,致力於提供高效能和透明化的RPC遠程服務調用方案
Dubbo就是資源調度和治理中心的管理工具。
Java電商項目面試題(三)