分庫:將海量數據分成多個庫保存,比如:2017年的訂單庫——Order2017,2018年的訂單庫——Order2018。。。
分表:水平分表(Order拆成Order1.....12)、垂直分表(Order,OrderDetail)
用Sql和ORM(EF)來實現


using EFAdvancedUsage.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace EFAdvancedUsage.Service { public class OrderService { /// <summary> /// 獲取訂單詳情 /// </summary> /// <param name="orderSerialId">格式如:2018100300001,前8位是訂單時間,后5位是當天訂單id(最大99999,即一天最多可產生10W-1條訂單)</param> /// <returns></returns> public OrderContract GetOrderInfoBySerialId(string orderSerialId) { if (!VerifyOrderSerialIdFormat(orderSerialId)) return new OrderContract(); string orderCreatedMonth = orderSerialId.Substring(4,2); //01~12 using (var context = new EFAdvancedUsageContext()) { /*①最好不用*,而是指明全部列; *②按業務需求列返回OrderBussinessContract對象; *③可對KeyId、OrderSerialId、CustomerId-Name-Mobile等常用條件查詢增加索引 */ string sql = "SELECT TOP(1) * FROM Order" + orderCreatedMonth + " Where OrderSerialId=" + orderSerialId; return context.Database.SqlQuery<OrderContract>(sql) .FirstOrDefault(); } } private bool VerifyOrderSerialIdFormat(string orderSerialId) { //用正則或其他方式驗證格式 throw new NotImplementedException(); } private string GenerateOrderSerial() { throw new NotImplementedException(); } } }
核心代碼同上
讀寫分離,暫時未整理好、下次再寫。
