其實我一直在準備另一篇博文的基礎資料,但是和朋友聊天,他問我最近在做什麼,我說在做系統log模組,並和他交流了一下,於是這篇部落格就應運而生。
其實我一直在準備另一篇博文的基礎資料,但是和朋友聊天,他問我最近在做什麼,我說在做系統log模組,並和他交流了一下,於是這篇部落格就應運而生。
所有資料都可以用如下形式表述:id,表名,列名,value。
比如說現在有這麼一條資料要插入user表:
id(guid,這裡為了方便理解用int)
username
password
1crazyjinn
123456
這一條記錄可以轉換為:
id表名
列名value
1user
username
crazyjinn
1user
password
123456
1user
當然,這種方式效率不是很高;不過可以把聚集索引加到表名上,然後非聚集索引加在列名上,再水平分割一下,如果你心情好,再做個讀寫分離,相信就非高併發、千萬資料量級的應用來說,理論上還是可以接受的。
好了,現在進入正文。
現在要做乙個通用的log模組。
既然是通用的,那就意味著靈活性要非常強,因為你不知道log中要記錄的資料結構是如何的。
而且給我的需求有乙個非常**的地方:要有回退功能。不過這個我們先不去管他。
根據之前的討論,我們可以很容易設計出一張log表。
id表名
列名type(create\edit\delete)
value
最後修改時間
如果處理的全是無關係的問題,這樣做就足夠了。但是要知道,rdbms,最重要的就是關係的處理。
比如說要log這樣兩張表:
上文所設計出的log表面對這樣的一對多關係是無法儲存的,不要往了,我們還有多對多關係。
讓我們來重新思考一下log模組的本質:
1、大量資料。
2、只是大量資料(和別的模組沒有關聯,純粹的資料)。
這種場景讓我不由自主的想到了nosql。在這裡,使用mongodb來實現。關於mongodb入門,可以參考下面兩篇文章:
祥叔:《mongodb開發學習(1)開天闢地,經典入門》
fish li:《mongodb實戰開發 【零基礎學習,附完整asp.net示例】》
mongodb使用bson來儲存資料,你可以簡單的把bson理解為json。眾所周知,json是乙個非常易於擴充的,鬆散的的資料格式;基於json易於擴充的特性,我們可以這樣來設計log表
logid
id表名
content(所儲存的內容,包含了最後修改時間,修改型別,以及新的修改id)
如果我對user表修改了6次,那麼我們log的資料如下圖:
我們主要把注意力集中在上圖用紅框標註的3條資料上。
第一條資料,contactlist是乙個array型別,長度為0,這表示沒有對應的contact。
第二條資料,contactlist長度變為1,這表示這次修改為user新增了乙個contact的關聯,我們將第二條資料完全展開來看:
可以看到,包含了乙個完整的contact進來。
第三條資料contactlist為null,這表示我在某個別的地方修改了user資訊。這次修改沒有涉及contact,所以儲存為null。當我們取資料的時候,如果發現某個list為null,就要遞迴的向上去查詢不為null的資料。例如我這裡,就要去找到第二條資料的contactlist。
為了方便大家理解,我把json貼在下面。對照前面的可以很好的閱讀。
,]},,]
},,,]
}],
"modelid"
:newbindata(3,
"yyqdfuoj6euudnl91leiga=="
), "modelname"
:"user"
, "_id"
:objectid(
"50b4254257751f09a02decba") }
這樣,乙個log功能的雛形就出來了
ad:2013大
我們該如何設計資料庫
資料庫該如何設計,一直以來都是乙個仁者見仁智者見智的問題。對於某一種資料庫設計,並不能簡單的用好與不好來區分。或許真的應了那句話,沒有最好,只有最適合。討論某種資料庫設計的時候,應該在某種特定的需求環境下討論。下面來討論一下在專案中經常碰到的使用者的 儲存的問題。我在這裡套用之前網路上流行 普通 文...
我們該如何設計資料庫(一)
資料庫該如何設計,一直以來都是乙個仁者見仁智者見智的問題。對於某一種資料庫設計,並不能簡單的用好與不好來區分。或許真的應了那句話,沒有最好,只有最適合。討論某種資料庫設計的時候,應該在某種特定的需求環境下討論。下面來討論一下在專案中經常碰到的使用者的 儲存的問題。我在這裡套用之前網路上流行 普通 文...
我們該如何設計資料庫 三
簡單的說說吧 假設為man使用者實現的是乙個徵婚系統,而woman使用者實現的是乙個選美系統。這麼說應該能理解man和woman的不能並同一張表的原因了吧。在 我們該如何設計資料庫 二 中,園友jacklondon chen提出了一些問題,大致如下 man woman應該設計在同一張表中。使用者表大...