在開發中,如果程式設計語言(例如PHP)和SQL(例如MySQL)都能實現某個功能,我們是用程式設計語言實現還是SQL?還是具體問題具體分析?

來源:互聯網
上載者:User

回複內容:

我的原則是:能放在PHP中的全放到PHP中,DB( 如MySQL)只放資料,不放邏輯(外鍵約束、預存程序等)。

用MySQL,但記住用的哪個資料庫是可以隨時換的,所以尤其不要用MySQL自己支援的一些和邏輯有關的特性。具體問題具體分析目前見到的效能瓶頸最多的就是在資料庫層,關聯式資料庫的橫向擴充雖然在發展,但是還沒有被廣泛接受的穩定方案,所以近幾年 NoSQL 會有這麼快的發展。而 application server 的橫向擴充就成熟許多了,增加 application server 之後只需要在 web server 上的負載平衡列表裡加上新的機器就好了。

既然資料庫橫向擴充比 application server 橫向擴充難這麼多,那是不是應該盡量把邏輯放到代碼裡而不是 SQL 上,來盡量降低資料庫的壓力呢? 舉個例子吧:
比如訪問量, 有tbl_hour中記錄了當天每小時每使用者的訪問次數, 如tbl_hour的表有三列: username, hour, visit_couter.

在每天淩晨1點, 要將前一天的每個使用者的訪問數加和, 產生前一天每個使用者的天訪問總數, 放如表tbl_day, 表有三列: username, dateName, visit_counter.

現在計算前一天的天訪問總數可使用程式來算, 也可使用sql來算:

1. 將所有前一天的資料取出來(SELECT * FROM tbl_hour WHERE hour betwen LAST_DAY_START AND LAST_DAY_END), 通過程式計算每個使用者的訪問數;

2. 將前一天的每使用者的訪問數直接通過SQL來計算(SELECT username, sum(visit_counter) FROM tbl_hour WHERE hour betwen LAST_DAY_START AND LAST_DAY_END GROUP BY username )

你會選擇哪種?
讓我選擇的話, 如果tbl_hour前一天的資料量特別大, 如百萬千萬或以上, 還是自己選擇計算吧;如果量級不是太大, 直接讓SQL計算, 會省事一些.

大家是怎麼選擇的呢? 聽聽大家的建議.其實把邏輯放在程式裡邊也分三種情況.
第一種比較弱,用程式設計語言system調用命令列命令, 不推薦這樣做,都是不得已而為之的. 比如db2的load只有c的api,在python和perl裡都沒有實現load的模組,那隻能用命令列了.
第二種是使用語言的資料庫模組去操作資料庫,本質上還是將計算放在了資料庫上. 只不過把邏輯封裝在了程式裡. 這種在效率上和預存程序沒有區別, 但是因為預存程序的特性肯定沒有語言強和多, 總的來說是要優於用預存程序的.
第三種是將資料庫的資料拿出來使用語言在記憶體中處理. 這個計算壓力在跑程式的機器上. 並且只適合做小資料量的業務計算. 如果涉及到幾張很大的表,是沒法用這種的.

在開發流程上,使用程式肯定是要優於用預存程序的. 程式的各種版本管理比預存程序要成熟的多.

還有就是如果用的是c等編譯型語言,而某處邏輯又頻繁更改,確實也有把一部分放在預存程序的情況.說一點小小的感覺:
商務邏輯,如果封裝在預存程序裡,省掉程式發布的時間,只要改SP,然後在資料庫更新即可,程式根本不需要修改,會簡單很多。
特別是很多編譯型語言,每次發布,都很噁心~~~~~~個人感覺代碼維護好過於資料庫維護。
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.