Esempio n. 1
0
 //在DBThread中执行
 private void DoSaveWork(List <IMessage> dataList, string saveCountKey, long saveCount)
 {
     try
     {
         DataSaveImplement.BatchSave(dataList);
         m_CurrentSaveCounts.AddOrUpdate(saveCountKey, saveCount, (g, u) => saveCount);
         LogSys.Log(LOG_TYPE.INFO, "DoSaveWork Finish. SaveCountKey:{0}, SaveCount:{1}, BatchDataCount:{2}", saveCountKey, saveCount, dataList.Count);
     }
     catch (Exception e)
     {
         LogSys.Log(LOG_TYPE.ERROR, "Save to MySQL ERROR:{0}, \nStacktrace:{1}", e.Message, e.StackTrace);
     }
 }
    private void SaveDirtyTableToDB(int msgId, List <InnerCacheItem> cacheItemList, string saveCountKey, int saveCount, int dbDataVersion)
    {
        try {
            Stopwatch stopWatch = new Stopwatch();
            stopWatch.Start();
            //临时测试代码
            if (m_TablePieceCapacity % 2 == 0)
            {
                DataSaveImplement.BatchSaveItemsProc(msgId, cacheItemList, dbDataVersion);
            }
            else
            {
                DataSaveImplement.BatchSaveItemsSql(msgId, cacheItemList, dbDataVersion);
            }
            //存储过程实现
            //DataSaveImplement.BatchSaveItemsProc(msgId, cacheItemList, dbDataVersion);
            //拼接sql实现
            //DataSaveImplement.BatchSaveItemsSql(msgId, cacheItemList, dbDataVersion);

            DataCacheSystem.Instance.QueueAction(() => {
                foreach (var dataValue in cacheItemList)
                {
                    dataValue.DirtyState = DirtyState.Saved;
                }
            });

            stopWatch.Stop();
            TimeSpan ts = stopWatch.Elapsed;
            LogSys.Log(LOG_TYPE.MONITOR, "SaveTablePiece Success. MsgId:{0}, SaveCountKey:{1}, SaveCount:{2}, BatchDataCount:{3}, DataVersion:{4}, DBThreadId:{5}, Time:{6}",
                       msgId, saveCountKey, saveCount, cacheItemList.Count, dbDataVersion, Thread.CurrentThread.ManagedThreadId, ts.TotalMilliseconds);

            m_CurrentSaveCounts.AddOrUpdate(saveCountKey, saveCount, (g, u) => saveCount);
            //LogSys.Log(LOG_TYPE.MONITOR, "SaveTablePiece Success. MsgId:{0}, SaveCountKey:{1}, SaveCount:{2}, BatchDataCount:{3}, DataVersion:{4}, DBThreadId:{5}",
            //             msgId, saveCountKey, saveCount, cacheItemList.Count, dbDataVersion, Thread.CurrentThread.ManagedThreadId);
        } catch (Exception e) {
            //写入DB失败
            DataCacheSystem.Instance.QueueAction(() => {
                foreach (var dataValue in cacheItemList)
                {
                    dataValue.DirtyState = DirtyState.Unsaved;
                }
            });
            m_CurrentSaveCounts.AddOrUpdate(saveCountKey, c_FailedSaveCount, (g, u) => c_FailedSaveCount);
            LogSys.Log(LOG_TYPE.MONITOR, "SaveTablePiece ERROR. MsgId:{0}, SaveCountKey:{1}, SaveCount:{2}, BatchDataCount:{3}, DataVersion:{4}, DBThreadId:{5}",
                       msgId, saveCountKey, saveCount, cacheItemList.Count, dbDataVersion, Thread.CurrentThread.ManagedThreadId);
            LogSys.Log(LOG_TYPE.ERROR, "Save to MySQL ERROR:{0}, \nStacktrace:{1}", e.Message, e.StackTrace);
        }
    }
 //在DBThread线程中执行
 private void SaveDirtyItemToDB(int msgId, InnerCacheItem cacheItem, string saveCountKey, int saveCount, int dbDataVersion)
 {
     try {
         DataSaveImplement.SingleSaveItem(msgId, cacheItem, dbDataVersion);
         //写入DB成功
         DataCacheSystem.Instance.QueueAction(() => {
             cacheItem.DirtyState = DirtyState.Saved;
         });
     } catch (Exception e) {
         //写入DB失败
         DataCacheSystem.Instance.QueueAction(() => {
             cacheItem.DirtyState = DirtyState.Unsaved;
         });
         LogSys.Log(LOG_TYPE.ERROR, "Save to MySQL ERROR:{0}, \nStacktrace:{1}", e.Message, e.StackTrace);
     }
 }