日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

性能分布式NewLife.XCode对无限数据的支持

發(fā)布時(shí)間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 性能分布式NewLife.XCode对无限数据的支持 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ?上周發(fā)布了《改進(jìn)版CodeTimer及XCode性能測(cè)試》展示了NewLife.XCode在性能上的表現(xiàn)。實(shí)際上NewLife.XCode是一個(gè)很平凡的ORM,只是在分頁(yè)和緩存方面多下點(diǎn)功夫,注意每一個(gè)細(xì)節(jié),才能保證在數(shù)據(jù)量大、業(yè)務(wù)繁忙的環(huán)境中得以保持良好的性能。

??? NewLife.XCode所經(jīng)歷過(guò)的比較忙的一個(gè)系統(tǒng)是一個(gè)網(wǎng)吧行業(yè)的核心系統(tǒng),為五千家網(wǎng)吧,一百萬(wàn)客戶端提供服務(wù),每天大概有十幾萬(wàn)會(huì)員多次登錄客戶端。當(dāng)然這一百萬(wàn)客戶端不可能同時(shí)全部登錄。因?yàn)闃I(yè)務(wù)需要,每個(gè)客戶端每隔一段時(shí)間(幾秒)Ping一次服務(wù)端,刷新在線記錄。只有一臺(tái)服務(wù)器運(yùn)行服務(wù)端,windows2003,雙核CPU,4G內(nèi)存,自組裝共花費(fèi)7kRMB。因?yàn)閾?dān)心TCP鏈接數(shù)限制,沒(méi)有采用TCP通訊,而直接使用WebService+IIS。開(kāi)了三四個(gè)IIS站點(diǎn),緩存全開(kāi)的情況下,每個(gè)進(jìn)程占用200M到500M內(nèi)存。數(shù)據(jù)庫(kù)是windows2008R2+MSSQL2008,四核CPU,32G內(nèi)存,自組裝共花費(fèi)14kRMB,MSSQL進(jìn)程占了10G多內(nèi)存。

??? 這次的主角是一位個(gè)人站長(zhǎng)使用NewLife.XCode做的系統(tǒng)(采集+整理+網(wǎng)站),我們先看現(xiàn)狀

服務(wù)器配置(國(guó)外,64位平臺(tái),2G內(nèi)存少了些)

網(wǎng)站建立時(shí)間:20天

每日訪問(wèn)量:14000IP? 12000PV

IIS CPU:0(因?yàn)榫W(wǎng)站的緩存命中率極高

IIS 內(nèi)存:200,000k * 3(3個(gè)進(jìn)程)

MSSQL

CPU:0(數(shù)據(jù)整理子系統(tǒng)寫(xiě)入,網(wǎng)站讀取

內(nèi)存:500,000k

重要表個(gè)數(shù):400(表結(jié)構(gòu)一致,因?yàn)閿?shù)據(jù)量大才分表

重要表數(shù)據(jù)量:20,000,000(20M*400=8B?80億?)

數(shù)據(jù)增長(zhǎng)速度:每2小時(shí)1萬(wàn)條

SQLite

重要表個(gè)數(shù):7

重要表數(shù)據(jù)量:20,000,000

數(shù)據(jù)增長(zhǎng)速度:每1小時(shí)2萬(wàn)條

?

??? 1,采集子系統(tǒng),采集到的數(shù)據(jù)寫(xiě)入一個(gè)SQLite,采集過(guò)程中也需要查詢(xún)

??? 2,數(shù)據(jù)整理子系統(tǒng),分析整理SQLite中的數(shù)據(jù),歸檔到MSSQL中

??? 3,網(wǎng)站根據(jù)用戶的查詢(xún),讀取MSSQL中的數(shù)據(jù)來(lái)展現(xiàn)

?

??? 這個(gè)系統(tǒng)是個(gè)什么樣的規(guī)模?昨天站長(zhǎng)告訴我,截止下午四點(diǎn),當(dāng)天廣告收人173刀。

??? 現(xiàn)在才不到一個(gè)月,數(shù)據(jù)還是很少的。站長(zhǎng)所苦惱的地方在于:如何存儲(chǔ)這些會(huì)無(wú)限增長(zhǎng)的數(shù)據(jù)?

?

??? 以下是站長(zhǎng)目前使用的手段:

??? 1,拆分表。XCode有個(gè)武藝(詳見(jiàn)《充血模型的ORM能做什么?——ORM組件XCode(十八般武藝)》),可以動(dòng)態(tài)改變實(shí)體類(lèi)所映射的表名。于是根據(jù)數(shù)據(jù)類(lèi)別來(lái)分表,重載實(shí)體類(lèi)的數(shù)據(jù)操作方法,查詢(xún)和寫(xiě)入前,根據(jù)當(dāng)前數(shù)據(jù)類(lèi)別計(jì)算表名并修改,實(shí)現(xiàn)了一個(gè)實(shí)體類(lèi)對(duì)應(yīng)多個(gè)相同結(jié)構(gòu)的數(shù)據(jù)表。并且,如果該名稱(chēng)的數(shù)據(jù)表不存在,XCode的反向工程會(huì)自動(dòng)創(chuàng)建。使用者一點(diǎn)都不用關(guān)心,上層使用代碼就跟使用單表一樣。

??? 2,采集和網(wǎng)站數(shù)據(jù)庫(kù)分離,開(kāi)始的時(shí)候采集也是寫(xiě)入MSSQL,顯然,這會(huì)讓MSSQL變得很忙,并且會(huì)帶來(lái)因采集而導(dǎo)致網(wǎng)站不正常的風(fēng)險(xiǎn)。

??? 3,緩存。網(wǎng)站對(duì)數(shù)據(jù)的實(shí)時(shí)性要求不高,采集而來(lái)的數(shù)據(jù),可以在一兩個(gè)小時(shí)之后才反映到網(wǎng)站上來(lái)。因此,網(wǎng)站打開(kāi)一級(jí)緩存,緩存時(shí)間可以設(shè)置為1小時(shí)。一級(jí)緩存這里不能設(shè)為永久,否則就再也拿不到采集到的新數(shù)據(jù)了,除非進(jìn)程重啟。期間也遇到緩存經(jīng)常失效的問(wèn)題,經(jīng)查是IIS應(yīng)用程序池回收所致,設(shè)為固定時(shí)間回收就可以了。

static void TestLog() {NewLog log = new NewLog();log.Action = "Test";log.Category = "SystemLog";log.Save();log = new NewLog();log.Action = "Test";log.Category = "UserLog";log.Save(); } class NewLog : Log<NewLog> {public override int Insert(){Meta.TableName = Category;return base.Insert();} }

??? 這么做,幾千張表,每張表兩千萬(wàn)的數(shù)據(jù),應(yīng)該是沒(méi)有問(wèn)題的了。

??? 當(dāng)然,這其中還是有一些問(wèn)題的

??? 1,SQLite寫(xiě)入頻繁,偶爾發(fā)生多線程沖突,XCode中的SQLite提供者增加了失敗重試機(jī)制,降低了沖突幾率,大概萬(wàn)分之一

??? 2,SQLite數(shù)據(jù)增長(zhǎng)過(guò)快,顯然,這個(gè)問(wèn)題很?chē)?yán)重,但也不是不能解決,XCode除了能動(dòng)態(tài)改變表名,還能動(dòng)態(tài)改變連接名,也就是說(shuō),跟拆分表一樣,能夠輕易的實(shí)現(xiàn)拆分庫(kù)。

??? 3,拆分庫(kù)又會(huì)帶來(lái)IO的問(wèn)題,這個(gè)時(shí)候,只能使用更多的數(shù)據(jù)庫(kù)服務(wù)器。

??? 4,如果網(wǎng)站使用的MSSQL成為瓶頸怎么辦?可以使用多個(gè)MSSQL服務(wù)器,假如10個(gè),配置文件中配置10個(gè)對(duì)應(yīng)的連接字符串,重載實(shí)體類(lèi)的查詢(xún)方法,查詢(xún)之前動(dòng)態(tài)修改連接名。至于該使用哪一個(gè)連接名,就看自己實(shí)現(xiàn)的算法了,最簡(jiǎn)單的就是輪詢(xún)或者隨機(jī)。這樣子就很輕易的實(shí)現(xiàn)了簡(jiǎn)單的分布式。新版本內(nèi)置了分布式的提供者,可以根據(jù)權(quán)重隨機(jī)分發(fā)查詢(xún),還可以把數(shù)據(jù)同時(shí)寫(xiě)入到多個(gè)目標(biāo)數(shù)據(jù)庫(kù)中去,而這些,都不需要修改業(yè)務(wù)實(shí)現(xiàn)代碼。

?

??? 不要怪我們狠(臃腫?),因?yàn)槲覀兪浅溲P?#xff01;

?

??? http://xcode.codeplex.com/

我不相信神話,我只相信汗水!我不相信命運(yùn),我只相信雙手! 分類(lèi): X組件
本文轉(zhuǎn)自大石頭博客園博客,原文鏈接:http://www.cnblogs.com/nnhy/archive/2011/03/21/XCode_Distributed.html,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者

總結(jié)

以上是生活随笔為你收集整理的性能分布式NewLife.XCode对无限数据的支持的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。