一個報告寫了這么長時間也算奇葩了,嗯,終于有空寫文章了,拖到了現在,這期間我試用了MySQL ,Oracle和Nosql中的Couchbase,事實上都沒有MSSQL來的干脆,因為數據的導入導出過程實在太慢了,慢到俺這渣機受不了。

不過在我的試用過程中,MySQL在小數據量的時候有很強大的優勢,短小而精悍,用起來十分舒服,在全部導入的情況下,與MSSQL速度比起來雖然 會有些慢,但在建立好索引的情況下,也是可以使用的,沒有索引就沒有速度。索引就是一個數據查詢的靈魂。
QQ群關系庫MSSQL到Mysql 的 數據導入
我進行了從MSSQL到 Mysql 的數據轉入測試。
(1)推薦使用工具MySQL Migration Toolkit,工具很容易上手,但在Source Database 處和set parameter時要指定數據連接類型, 即加上“charset=utf8”,網上有很多這樣的資料大家可以直接百度。另外轉換的時間會很長,大家可以用一個表來測試一下速度。
改換完成后效果圖如下:

(2) 第二種方法就是自己寫一個轉換工具,因為數據結構并不復雜。
將數據一條一條來讀,然后插入就可以了,而且這種方法同樣適用于Oracle等數據庫,雖然它也會很慢。
我的導入就是自己寫的只是數據太大了,以至于電腦會卡死,后來又寫了事務加插入判斷才算讓它可以好好干活。
工具以及源碼春節后我會放到習科論壇,大家可以關注一下。
QQ庫數據結構整體優化
已知這個庫中Group Data庫是其中的關鍵,因為它保存了用戶的昵稱,年齡,性別等信息。結構如下:

而這個結構事實上又是以QunNum 來進行的存儲,以方便群內成員的查詢。

如果我們反其道而行呢?將數據結構進行改變,以QQNum 來進行結構存儲,而后劃分區段是不是就可以更好的優化查詢速度呢?
其實就是對整個庫進行一個以QQNum 的一個ASC排序 ,從10000開始一直到庫內最大的QQ的一個排序。部分效果如下:

那么如何進行這個排序呢?
先建立新的數據庫,以ASC順序來建立表,然后對數據進行判斷,劃分存儲表與存儲位置,隨后插入數據。這個也可以用存儲過程來干,只不過同樣是很漫長的一件事,而且對硬盤空間是一個大考驗,當然服務器就很輕松了。
我只進行了很少部分的轉換,就如上圖,效果就是查本人的渣機會比神機還要快,雖然我的硬盤已經紅到爆了。
完整存儲過程我也會在年后放到習科論壇,大家多多關注。
NoSQL筆記
這段時間學了點NoSQL,現在分享給大家。
個人認為這個數據庫的興起是一種必然,關系型數據庫的應用在大數據時代出現了很大的弊端,所以眾多Nosql數據庫才會有興起。
起源時間:“NoSQL”一詞,源于 2009 年 6 月 11 日在舊金山舉行的一場技術聚會(meetup)。
定義:如果說要一個定義的話,我理解為“開源分布式的非關系型數據庫”。
NoSQL開發原因始于大數據時代的到來,Web技術的進步讓我們這個時代的網站的數據量急劇增加,于是就要應用到集群,而關系型數據庫無法在集群中高效運行。
原因如下:
(1)關系型數據庫開發時就不是設計給集群用的。 Oracle RAC 或 Microsoft SQL Server 在集群上使用會使部分功能無法使用,如事務,一致性等,而且查詢效率會變低。
(2)更坑爹的就是許可費,。商用的關系型數據庫通常按單臺服務器計費,所以在集群中使用會非常貴。(對于這一點要說明,NoSQL的眾多成員都是開源的,這也是它的優點與特征之一。)
(3)關系型數據庫的遷移很麻煩,比如我們現在的QQ庫。
所以就促使了創新,促使了NoSQL的開發, 各種 NoSQL 數據庫的共同特性是:
■ 不使用關系模型
■ 在集群中運行良好
■ 開源
■ 適用于 21 世紀的互聯網公司
■ 無模式
用直白的話說的話就是,支持大數據,支持集群,省錢,速度還快,而且比關系型數據庫還要安全一些,這也是我認為它會在以后越來越火的原因。
它最大的特征就是:NoSQL 數據庫不使用 SQL,即結構化查詢語言。
PS: 一旦想到SQL,我就想到了注入,如果不使用SQL,那么注入攻擊是不是也就不復雜存在了呢?究竟是不是呢?
Nosql的種類。
主要包括:鍵值數據庫 文檔數據庫 列族數據庫 圖數據庫。
鍵值數據庫:存放會話信息,用戶配置信息,購物車數據等;
文檔數據庫:事件記錄,內容管理系統及博客平臺,網站分析與實時分析,電子商務應用程序等;
列族數據庫(大表格式數據模型):事件記錄,內容管理系統與博客平臺,計數器,限期使用等;
圖數據庫:互聯數據,安排運輸路線、分派貨物和基于位置的服務,搜索引擎,推薦引擎等。
Nosql實例
為了更直觀的了解NoSQL,小菜就自己搭建了一個 鍵值數據庫,來分享下心得。
數據庫:Couchbase
類型:鍵值數據庫
版本:2.2.0-821-rel
搭建完成后效果圖:

這個NoSQL數據庫使用 Web 8091 端口 作為控制臺,很方便。
下面顯示鍵值數據庫:

庫內儲存的值:

值內的內容:

從上面的例子中我們可以看出,它并沒關系數據庫所謂的表結構,而是直接存儲的key值,而且存儲中的東西很多,這種存儲在 <NoSQL精粹> 一書中被稱為聚合,沒有固定的內容格式,這就是所謂的無模式。將數據的節點數降到最低,更加適合集群的使用。
如果說關系數據庫的存儲時一個表的數據是一個人的部分屬性,多個表組成一個人的話,那么Nosql就更像是一次把一個人保存進去,包括這個人的身高屬性等等存在同一個key內,數據比之關系型數據庫更加獨立化。
下面我們來進行一個程序控制Couchbase 的實例,源碼如下:
namespace MemBaseApp
{
class Program
{
static void Main(string[] args)
{
//配置服務器
var mbcc = new CouchbaseClientConfiguration();
//設置各種超時時間
mbcc.SocketPool.ReceiveTimeout = new TimeSpan(0, 0, 2);
mbcc.SocketPool.ConnectionTimeout = new TimeSpan(0, 0, 4);
mbcc.SocketPool.DeadTimeout = new TimeSpan(0, 0, 10);
//使用默認的數據庫
mbcc.Urls.Add(new Uri(“http://127.0.0.1:8091/pools/default”));
//建立一個Client,裝入Client的配置
var client = new CouchbaseClient(mbcc);
//添加一條數據
var item = client.Cas(StoreMode.Add, “new1″, “Hello World! I am guoker,i am 1,測試文字”);
var item2 = client.Cas(StoreMode.Add, “new2″, “Hello World! I am guoker,i am 2″);
var item3 = client.Cas(StoreMode.Add, “new3″, “Hello World! I am guoker,i am 3″);
//獲取剛添加的數據
Console.WriteLine(client.Get(“new1″));
Console.WriteLine(“完成!”);
Console.ReadLine();
}
}
}
運行效果:

大家可以看到源碼里面完全沒有SQL語句,只是調用了數據庫提供的dll,就完成了插入與讀取的功能,這也說明了NoSQL 確實無法像原來關系數據庫那樣用 結構化查詢語言 進行注入。
NoSQL真的無法注入嗎?
沒結構化查詢語言就無法注入嗎?不,凡事沒有絕對,前幾天翻墻時就找到了一些相關的資料,通過程序所使用程序語言來對NoSQL的一些注入,javaScript、php、.net、java等語言因為可以直接對數據的調用而成為新的注入語言。
世上沒有完美的程序語言,總會有蟲子的存在,就像有光,就會有陰影。注入安全必將永遠存在于數據庫的首要安全行列。
NoSQL的其它缺點與前景:
本人測試漏洞:因為依舊擁有登錄功能,弱口令與端口爆破依舊會存在。
現在的NoSQL 還沒有一個統一的標準,魚龍混雜,而且各類太多,在使用上還有很多未知BUG,而且應用還是很少,所以關系型數據庫依舊占有很大的市場,它就像個未成年的孩子一樣等待人們的開發和更新維護,不過我相信隨著大數據時代的進步,它總有一天會長大的。
大數據時代
甲:喂,前兩天你去上海了?
乙:嗯,你怎么知道的?
甲:你說說不是有定位嗎?
乙:靠,那我老婆不是也知道了。
甲:你不會。。。
上面的對話中的事大概在現在生活中并不少見,我們的隱私不知不覺中就會被泄露,不管你想不想被人知道。
在大數據時代,人們的一舉一動都被互聯網所監控,除非你是一個與世隔絕的野人,否則就不可能不被監控,至于那些信息被誰所擁有,它是否該擁有,被用來干嘛,我們一無所知。。。
我們是可悲的,也是幸運的,我們幸運的出生在了足不出戶觀天下,千里傳音的時代,擁有著歷史上從未出現過的文明盛世,又可悲的丟掉了所有的隱私。
信息安全的保護重于泰山,而大多的人們還不太明白這一道理,這也許會造成很多的悲劇,幾乎可以預見。
在一部電影《網絡末日戰》中,黑客掌握了可憐受害者的幾乎所有信息,銀行卡,身份證件,學籍,戶口,甚至知道他女兒的信息,以至于他只能接受黑客的所有安排,聽從黑客指揮,這也許就是數據被惡意使用的實例。
為了數據的安全我們可以做什么呢?
數據正在被各種泄露,每天,每夜,每分鐘。。。設想一下,騰訊的數據庫如果可以任意查看(不是沒有可能,支付寶都泄了,何況騰訊呢。),每個人的QQ,姓名,電話,住址,常用網站,出行日志,性格,心情等等,anything,都被記錄下來的話,是不是就可以預測出這個人未來幾天的事呢?
我們通過心情與日志的分析,得知行程,分析IP得知現住地,電話,聊天記錄與密碼分析,得到他的常用密碼,是不是就和上面一樣可以控制這個人呢?不聽話就把他錢全轉到紅十字會啊,有木有,太邪惡了。
而這次QQ群數據的泄露,如此簡單,讓人不得不對現在的網絡心寒。
更別提以前那些多少萬,千萬的數據了,不是黑客們太聰明,是大家對數據的太不重視了,以至于,這些信息的外泄。
其實大數據有很多用處的,以龐大的數據作為支撐,我們就可以預測出很多未來,甚至可以用來建造一個世界也說不定呢。
如果我們掌握足夠多的信息,里面包含了地圖,天氣,新聞,身份,性格,財富,然后以某種規律運行,是不是就可以虛擬一個世界?是不是就可以預知未來呢?再如果,我們先是足夠的物理支持,我們能不能建造一個屬于自己的世界呢?
也許是我想多了,可是誰又知道我們是不是NPC,在玩地球on line呢。。。這個世界難道不像一個游戲嗎?各種規則,力學,元素周期表等等都表明了我們在一個已經規定好了的空間中生存。好無聊啊。
自從一個外國人看了中國易經,造成電腦后,世界都因此翻天覆地了,我們懂了好多東西,也許電腦就是我們打開未來的鑰匙,只用程序員能找到規律,改變世界吧,哈哈,最近看電影看多了,歡迎大家吐嘈。。
。