比如我做一個聊天程式,服務端會存盤所有用戶的資訊,比如名稱,性別,省份等等。。。
這些資訊一般來講,是自己做個結構陣列,存盤在這個結構資料中,服務端程式退出時,保存到服務器的硬碟檔案上。服務端啟動時,再從硬碟上把資料讀到這個結構陣列中?
還是把用戶資訊存盤到象mysql這樣的資料庫中?然后用mysql的查詢語言對資料庫操作,添加記錄,查詢記錄什么的?
一般是用哪一種?
uj5u.com熱心網友回復:
我現在是用把用戶資料存盤在結構陣列中的,姓名,年齡,性別,地址等等。。。服務端程式退出時,保存這些資料到硬碟上,服務端程式啟動時,再從硬碟檔案中加載到結構資料中。
但這樣有一個缺點,就是C語言的結構資料,每個欄位都是定長的。而我需要一個變長欄位。這個變長欄位,存盤用戶自己的資訊,比如照片。有的照片很小,幾K,有人照片很大,幾百K,如果每個用戶都給幾百K的空間,會造成很大的浪費。
而象mysql這樣的資料庫,最誘人的一點就是可以存盤變長欄位。比如變長二進制資料。這對我很有用。我還準備給每個用戶設一個個人微博。每個用戶自己發的微博內容,就存盤在自己的變長欄位里。而有的用戶則根據不會發微博。所以,有的需要幾M到十幾M的空間,有的根本不需要。字長欄位是根本無法完成的。
請問,這種情況下,是不是用mysql這樣的資料庫來存盤用戶資訊更好一點?
uj5u.com熱心網友回復:
用資料庫來保存用戶資訊還有一個好處,就是可以改變欄位的長度,或者增加或洗掉某個欄位,而不影響其中的內容。而用C語言的結構陣列來保存的話,就不可能做到這一點。除非把把新結構和舊結構放一起,把資料用程式從舊結構中讀取出來,存到新結構中。總之沒有資料庫操作那么方便 。
我想問的是:一般情況下,服務端保存的用戶資訊是在資料庫中呢?還是在自己設計的陣列中?
uj5u.com熱心網友回復:
資料庫uj5u.com熱心網友回復:
通常情況下,文字資訊放資料庫,圖片存硬碟,圖片路徑啥的寫進資料庫。并發大就用nosql資料庫,但看起來你應該不需要。
uj5u.com熱心網友回復:
你是說:用戶的帳號,昵稱,密碼,性別,年齡之類的資訊,都是存盤在資料庫的。文字資訊,比如甲給乙發了一條訊息,而乙不在線。這條訊息就要暫時存在服務器里。是存在乙的記錄里。等乙上線了,服務器就發給他。這些文字資訊,也都是存在資料庫的?
圖片檔案,是存在硬碟,然后把硬碟的檔案名存在資料庫,是嗎?
如果圖片檔案也以二進制的形式存在資料庫里,有什么不好?
另外,如果每個用戶都有一個微博。就象QQ的空間。每個用戶會發一些自己的內容,供好友看。這樣的微博,是存在資料庫里好呢?還是。。。另外用檔案存盤比較好?這樣的可能會比較大,如果用戶發的多的話,可能多達十幾M。
uj5u.com熱心網友回復:
還有一個問題,就是一些結構,怎么存盤在資料庫里。比如每個用戶登錄上來,都會有一個socket_in結構,共14個位元組,有四個位元組是IP地址,有2個位元組是埠號,另有8個位元組是空的。這樣的結構,怎么存盤在資料庫里?用整形量存盤也不好。用字串存盤也不好。用二進制存盤好象也不好。
uj5u.com熱心網友回復:
1.圖片檔案存資料庫一是不好直接參考,如果放硬碟上就可以通過HTTP等直接讀取;二是資料庫尺寸會變的很大,從而各種效率都會降低,如果用大型資料庫就另當別論了。
2.另外你提的問題,涉及范圍就廣了,這種應該要用快取頁吧。
uj5u.com熱心網友回復:
還有一個問題,就是一些結構,怎么存盤在資料庫里。比如每個用戶登錄上來,都會有一個socket_in結構,共14個位元組,有四個位元組是IP地址,有2個位元組是埠號,另有8個位元組是空的。
這樣的結構,怎么存盤在資料庫里?用整形量存盤也不好。用字串存盤也不好。用二進制存盤好象也不好。
我覺得這就是種類似語言轉換的問題,結構是你在程式中的語言表現,在資料庫中,也有資料庫的語言表現,就是欄位,把結構中的變數一一對應到資料庫的欄位中。
uj5u.com熱心網友回復:
第二種資料庫,資料結構只是存盤資料的方式,是一種結構,而資料庫的資料是寫在硬碟上的,也就是物理上的存盤uj5u.com熱心網友回復:
搜“序列化和反序列化”轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/134099.html
標籤:網絡編程
上一篇:在vc上模擬GUI的萬年歷
