分庫分表、讀寫分離——用Sql和ORM(EF)來實現


分庫:將海量數據分成多個庫保存,比如: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();
        }
    }
}

核心代碼同上

 

 

讀寫分離,暫時未整理好、下次再寫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM