手游公司运维之初识MongoDB
接觸MongoDB一年多了,之前從來沒有想過自己會在工作中大量使用MongoDB。曾經一段時間,我還想過以后做一個合格的DBA,自己還學習了Oracle和MySQL數據庫,但是所在的公司一直都有專門的DBA在維護,所以實際工作中接觸的非常少,也只會一些基本查找而已。沒有想到自己對MySQL都還沒有作深入研究,就直接成為了一名業余的MongoDB DBA,哥也是被逼的啊,公司的游戲數據全存到MonogDB數據庫里面的,怎么能不好好學。
我最初接觸MongoDB數據庫是之前在一個×××公司的時候,那邊的開發同事決定在新版本中使用MongoDB作為消息系統的后端數據庫。所以那段時間我研究了一下MongoDB數據庫,在網上下載了《MongoDB The Definitive Guide》一書。看了一段時間覺得MongoDB還挺有意思的,數據類型都比較寬泛,非常適合大量隨機數據同時寫入。恰巧在目前公司,前項目團隊也是采用MongoDB數據庫來存儲游戲數據,所以迫不得已,我和幾個剛來公司的開發同事一起研究MongoDB。半年多過去了,從一開始對MongoDB的憎恨,懷疑,不肯定到現在的順其自然,原來不是MongoDB不行,只是我們了解得還不夠,加上前項目程序員留后門搗亂,讓我們不斷地去懷疑MongoDB的穩定性。最近要根據運營同事需求作合服操作,就是將多個區服的游戲數庫據合并到一個庫中。和開發同事討論的時候,他說是MongoDB還好,要是MySQL的話,合服操作還要麻煩一些。從和開發同事交流的過程中,他們也認為MongoDB很適合用來作游戲數據庫。
MongoDB的官方網站是http://www.mongodb.com 。從這個網站上可以獲取一些MongoDB公司的相關信息,去年這個公司還叫10gen。MongoDB相關的文檔可以從http://www.mongodb.org 獲取。MongoDB是一種NoSQL型數據庫,它是一種文檔型數據庫,也就是它沒有特定的database schema。可以不用像MySQL那樣將相關聯的數據放到不同的表中,然后使用join進行多個表之間的關聯操作。它可以直接將相關的數據放到一個document中,同時一個document還可以嵌套子document。MongoDB是采用c++語言開發的,從官方下載軟件包解壓后無需編譯安裝,直接就可以使用二進制文件,安裝和使用都很方便。
MongoDB數據庫中的一條記錄叫做一個document(文檔).一個文檔是由多對field和value組成的數據結構。MongoDB的document格式和JSON格式相似,documnet中的value可以包含其他文檔(document)或數組(arrays)或文檔數組(arrays of documents)。
線上player表(集合)中的一個document如下:
{
"_id" : ObjectId("52706d57144fa27d5e000015"), //MongoDB為每條記錄自動生成的
"action" : 20,
"action_max" : 10,
"activity_buy" : 0,
"bag" : 0,
"bag_max" : 29,
"board_ver" : 21,
"cache_version" : 1383099735,
"code" : "KQSFSGTTLI20",
"code_from" : "",
"code_get_bonus" : 0,
"code_used" : 0,
"coin" : 65470410, ? ? ? ? ? //玩家金幣數量
"coin_max" : 4195000,
"create_time" : 1383099735,
"email" : "leon0820@hotmail.com", ? ? ? //玩家郵箱地址
"friends_list" : [ ],
"friends_num" : 15, ? ? ? ? ? ? ? ? ? ?//玩家好友數量
"gold_bonus" : 1000000,
"gold_buy" : 1009518,
"gold_cost" : 181149,
"instance_win_times" : 139,
"is_buy" : 1,
"is_get_daily_bonus" : 1,
"kizuna" : 998006,
"last_active_time" : 0,
"last_broadcast_time" : 1386154724,
"last_dailybonus_time" : 1386153959,
"last_login_time" : 1386154724,
"last_regrow_action_time" : 1385629876,
"level10_gift" : 0,
"login_times" : 77,
"makefriends_gift" : 0,
"next_query_time" : 1386154784,
"online_seconds" : 26422,
"population" : 445449,
"population_max" : 414500,
"repute" : 0,
"request_time" : 1386154756,
"series_login_days" : 1,
"status" : 1,
"tmp_backpack_num" : 50,
"tmp_help_friends_times" : 0,
"tmp_helped_friends_times" : 0,
"tmp_sid_token" : "a1b2a26e4674dc6",
"uid" : "94ff486f0c697bec21e0af3a010a88d7",
"unlock_blacksmith" : 1,
"unlock_dojo" : 1,
"unlock_lab" : 1,
"unlock_market" : 0,
"unlock_templechurch" : 1,
"user_name" : "Leon", ? ? ? ? ? ? //玩家的角色名
"version" : ""
}
使用documents的優勢有:
1)documents和很多編程語言的本地數據類型相似。
2)通過使用嵌入的documents和數組可以減少使用聯合查詢(join)。
3)動態的數據模式,支持豐富的數據類型。
MongoDB通過Replication Set和Sharding技術可以實現數據庫的冗余,高可用和高擴展性。目前線上使用的是Replication Set的方式。Primary+Sencondary+Arbiter方式。
國內使用MongoDB的公司
1)天天動聽。從他們的官方網站招聘上可以看出他們也在大量使用MongoDB數據庫。http://www.ttpod.com/job/detail/2
2)大眾點評網。http://careers.dianping.com/#!/join?category=rd&location=all
? ? http://www.mongodb.org/about/production-deployments/
3)易到用車。http://www.yongche.com/job/intro.html
4)視覺中國。http://www.infoq.com/cn/interviews/pf-mongodb-develop
5)淘寶網。http://www.mongodb.org/about/production-deployments/ 。淘寶網使用MongoDB存儲監控數據。
國外使用MongoDB的公司
1)ebay。http://www.mongodb.com/presentations/mongodb-ebay
? ? ? ? http://www.mongodb.com/presentations/storing-ebays-media-metadata-mongodb-0
2)sourceforge。http://www.mongodb.com/presentations/realtime-analytics-using-mongodb-python-gevent-and-zeromq-0
3)github。http://www.mongodb.com/presentations/mongodb-chicago-2012/mongodb-analytics
4)Forbes.
更多使用案例可以參考
http://www.mongodb.org/about/production-deployments/
http://www.mongodb.com/use-cases
轉載于:https://blog.51cto.com/john88wang/1381742
總結
以上是生活随笔為你收集整理的手游公司运维之初识MongoDB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机续航能力测试软件,五小时极限测试告诉
- 下一篇: 什么公司邮箱邮件系统安全,安全邮箱格式怎