mongodb 實現關係型資料庫中查詢某一列 的效果,mongodb資料庫
最近在tornado\mongodb\ansible
mongodb中有個find()方法很牛逼,可以將集合中所有的表都傳出來,一開始我這麼寫
class Module_actionHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): coll = self.application.db.waitfish hosts = coll.find({}, {'hostname':1,"_id":0}) modulenames = ['ping', 'setup', 'copy'] self.render( "module_action.html", hosts = hosts, modulenames = modulenames, )
然後在模板中:
<select name="hostname"> {% for host in hosts %} <option name="{{ host['hostname'] }}" >{{ host['hostname'] }}</option> {% end %}</select>
後來想了想find()方法是找出所有的表,這太傷不起了..
於是又去看了度娘,基本上都是列出一大堆查詢命令,好多中方法的.
最後我還是選了這一種:
class Module_actionHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): coll = self.application.db.waitfish hosts = coll.find({}, {'hostname':1,"_id":0})#解釋一下,這裡hostname:1 表示返回hostname列,由於_id列每次都返回所以用0禁用掉,模板還一樣 modulenames = ['ping', 'setup', 'copy'] self.render( "module_action.html", hosts = hosts, modulenames = modulenames, )
關係型資料庫Oracle的資料匯入非關係型資料庫mongodb
首先要確定,你們為什麼需要將關係型資料庫中的資料匯入到NoSql資料庫中?是為了達到什麼樣的需求才這麼做的。
我也是做開發的,我推薦以下幾點,不要嘗試將關係型資料庫轉換為非關係型資料庫:
1、節約維護成本;
2、軟硬體成本。Mongodb儲存資料需要更多的儲存空間。(當然,相對不同系統,硬體的配置也不盡相同);
3、為分布式而分布式;
4、從軟體角度上,單純為了提高IO的速度而進行轉換;
如果非要強行移植,那麼需要考慮一下幾點:
1、Mongodb的維護以及災備需要相對專業的開發人員擔當(如果你們的營運就會,就當我沒說過),因為許多Mongodb的配置都需要一些簡單的javascript文法支援的,開發人員會比較容易上述;
2、Mongodb是“非關係”型的,所以以嚴格遵守範式所設計的關係型資料庫進行移植時,需要考慮多表查詢的效率。一般來講,關係表要對資料進行冗餘才能達到高效率的查詢。你只能通過代碼的方式將多個主表和關係表連同一個資料查詢表一同維護,增加的代碼複雜度是顯而易見的。
3、關係型資料庫中很多特性在Mongodb中都沒有,在移植之前必須要考慮清楚。例如自增主鍵、聯合主鍵(可以用唯一索引代替)、相關驅動和串連方式等等(本人用的mssql,所以只能舉mssql的例子。);
4、因為Mongodb使用的是作業系統自身的檔案儲存體系統對儲存介質進行操作和維護的,所以會在頻繁進行增、刪操作時產生磁碟片段。(開發人員不用太關係這個);
5、最後要說道一下Mongodb的查詢,如果你的關係型資料庫中之前有很多的多表串連查詢(3張以上),則請不要嘗試移植。否則只能參考2進行操作才能達到效能和效率最大化;
mongodb的問題
mongodb作為非關係型資料庫是沒有串連查詢的。可以在使用者資訊的collection裡增加一個發帖數欄位,每次插入文章的時候更新一下這個欄位,這樣可以保證查詢效率,本來mongodb查詢就比更新快很多,為了快速查詢需要一些冗餘犧牲一下插入效能。在資料量比較大的collection中用count操作,如果合格結果很多,效率不是很高