訂飯系統方案之 選擇誰在某天訂飯 的演算法

2021-05-23 06:32:46 字數 936 閱讀 5228

打油詩:

公司小,沒有自己的食堂;

夏天熱,不願出去吃飯;

我們於是都訂飯!

人人都訂飯,我們做軟體;

訂餐軟體好,大家頂得高;

每天多幾份,雷鋒不見了!

都等別人打**訂飯,雖然系統中錄入了n多條資訊,依然有些不方便。 話說

我們訂飯的人很多,最終有人做了個訂飯的系統,但是在如何選擇誰在某天訂飯的問題上出現了分歧!

於是我寫了以下的具體方案:

【方案原始目標】

讓所有人公平地享用訂飯系統;

【解決方案原型】

每乙個人新增兩個字段,n吃飯的總次數,服務於別人的人次數m

結論:1、m/n 是 服務係數

4、道義上講:服務係數越大的人越雷鋒

最終結論:服務係數最小的訂飯。當幾個人一樣的情況下,隨機選擇乙個(只需要top 1即可)

【存在的問題】

人初始化的時候資料出現了0次作為被除數,這個時候應該給乙個特例,吃飯次數為0的,服務係數為1;

【設計方案】

1 資料庫層

表關鍵字段:user(userid, username, eatingcount,helpothercount)

select top 1 userid,username from user t1 inner join

(select min(case eatingcount when 0 then 1  else helpothercount/eatingcount end) v

from user )t2

on (case eatingcount when 0 then 1  else helpothercount/eatingcount end) = t2.v

2 介面層

當訂飯完畢後更新資料:即訂飯的介面增加乙個按鈕,誰點誰訂飯

點完後做如下計算和操作:

分布式系統事務解決方案選擇

解決方案一 使用 alibaba seata 可以來解決 但是該種解決方案 不適合 大併發情況下,會影響效能,使用於管理後台各個微服務呼叫的增刪改查的事務管理 解決方案二 使用 mq 來解決,保證資料的最終一致性 如 在電商系統中,當下乙個訂單後,要扣減庫存,我們先遠端呼叫 庫存介面,有可能會出現,...

分布式系統解決方案(五) 快取的選擇

描述 快取雪崩是指快取中資料大批量到過期時間,而查詢資料量巨大,引起資料庫壓力過大甚至down機。解決方案 1 快取資料的過期時間設定隨機,防止同一時間大量資料過期現象發生。2 如果快取資料庫是分布式部署,將熱點資料均勻分布在不同搞得快取資料庫中。3 設定熱點資料永遠不過期。描述 快取穿透是指快取和...

某大型銀行深化系統技術方案之十五 服務層之服務呼叫

傳送門 android兵器譜 服務層 服務層主要體現了soa體系下的元件復用和業務復用機制。服務的邊界定義決定於粒度和耦合度。粒度表示的是乙個服務的大小,它可以理解為服務操作的範圍,粗粒度的服務,操作的內容廣而且雜 細粒度的服務,操作的內容細而且簡單。粗粒度的服務設計,可以減小服務之間的耦合性,但付...