當前位置:首頁 » 軟體設計 » mongodb設計

mongodb設計

發布時間: 2020-12-07 13:17:20

① 如何設計高性能mongodb資料庫

有效的數據模型是為應用服務的,設計構架的關鍵問題是文檔模型適合使用嵌入式回模型(embed)還是答使用引用模型(references)。
嵌入式數據模型(Embedded Data Models)
在MongoDB中,你可能將相關數據嵌入到一個單一結構或文檔,這些模式通常被稱為「非正規」模型,但是它充分利用了MongoDB富文檔模型的有點。
嵌入式數據模型允許應用程序存儲相關的信息在一條資料庫記錄中,這樣應用程序可能需要更少的查詢和更新來完成常規的操作。

② 如何設計mongodb schema

其實官網的這篇設計哲學還是很不錯的(http://www.mongodb.org/display/DOCS/S...)
MongoDB和傳統SQL schema設計上最大的區別專就是關於模型關系屬用什麼方法表示比較好(在MongoDB里即可以用Link,又可以用Embedded)
簡單總結下:
FirstClass (比如「User」這種) 應該用獨立的Collection
"條目類型"的,應該 embedded
兩個模型之間如果是包含關系,用 embedded
多對多關系,用 link(類似sql裡面的foregin key)
如果一個模型,其可能存的對象很少,那麼就用獨立的collection,這樣有助於mongodb server做緩存
embedded方式不利於做復雜的關聯,復雜的查詢
embedded方式性能很有優勢,如果你有「性能」方面的要求,可以考慮用embbed!

③ mongodb中的用戶,角色,許可權該怎麼設計

1. 輸入命令:show dbs發現內置兩資料庫名admin名locallocal像沒啥用哪位使用程發現local表用途希望能夠留言提醒我專說說admin表
2. 輸入命令:use admin發現該DB包含system.user表呵呵沒錯表等同於MsSql用戶表用存放超級管理員我往面添加超級管理員試試看

3.
輸入命令:db.addUser('sa','sa')我添加超級管理員用戶usernamesapasswordsa即我添
加超級管理員咱測試看看咱再連接MongoDB需需要提示輸入用戶名、密碼我先退(ctrl+c)

4. 輸入命令:use admin

5. 輸入命令:show collections查看該庫所表發現MongoDB並沒提示輸入用戶名、密碼奇怪事呢文章始提

MongoDB默認設置許可權訪問限制即我先設置需要許可權訪問限制咱再看看效設置呢

6. 注冊表找MongoDB節點ImgPath我修改加入 -auth所示:

"D:\Program Files\mongodb\bin\mongod" -dbpath e:\work\data\mongodb\db -logpath e:\work\data\mongodb\log -auth -service

7. 輸入命令:use admin

④ mongodb 一對多如何更好設計

1、如果多的這方,僅僅是一這方會引用,並且所有數據加起來不會超過16M請使用,內嵌數專組文檔的方式;屬
2、多的這方,其他地方也需要使用,並且文檔都保存在同一個資料庫中,請使用手工引用方式;
3、多的這方,其他地方也需要使用,並且文檔未保存在同一個資料庫中,可以用新的rdbf引用。
3也可以用在二的場景,但是會多存兩個欄位,引用集合名稱、引用資料庫名稱。查詢都需要兩次查詢。我個人實踐推薦方式2.
多餘說明:mongodb的基本關聯關系也就上面三種,需要更復雜的關聯關系使用上面三種方式組合使用。

⑤ 請教一個mongodb數據結構的設計問題

雖然2.6的intersection限制很多, 但據我的經驗,還是就用原來的數據結構,數組的方法不見得好。給每個欄位建索引(password就不用建了吧,我覺得不太會有需求直接查password和排序),然後根據具體的業務需求建多欄位索引。不用覆蓋所有的可能,能把查詢結果集縮小就好了。比如查詢firstname 和age,就算你沒有建(firstname:1, age:1) 的索引,mongodb多半還是會用firstname的索引查詢,速度也不會慢很多。

⑥ mongodb設計,要不要「分表」

在我看來,放不放都可以,你所說的"數據移動"並不準確。這是要看你專的業務是怎麼實現屬的:需不需要在取消息的時候同時去取用戶的其他信息;你所說的這個用戶表除了消息以外的信息多不多;你在其他不需要取消息的時候是怎麼查詢的。

分開存,也不一定要查兩次,很有可能在取消息之前你就已經得到用戶id之類的標示和其他消息了,完全可以緩存。存一起,也不一定就快,比如你取的時候不需要取消息,但是每次都返回整個對象,能快么?

⑦ mongodb 怎麼設計已讀內容不顯示呢

topic 表
{
"_id": ObjectId(12345) ,
"title": "shajiquan.com"
}

user 表
{
"_id": ObjectId(112233445),
"username": "shajiquan.com"
}

read 表
{
"user_id": ObjectId(12345),
"topic_id": ObjectId(67890)
}

# 某用戶 閱讀過內的容
has_read = db.read.find({'user_id':USER_ID},{'topic_id':1})
has_read = [i.get('topic_id') for i in list(has_reads)]

# 某用戶 沒有閱讀過的
topics = db.topics.find({'topic_id':{'$nin':has_read}})
topics = list(topics)

⑧ 如何用mongodb設計用戶許可權表

例如:mysql安裝配置好後,有一個自帶的mysql資料庫,裡面有一張user表,用來存放用戶,以及用戶許可權,而mongodb這個最像關系型的資料庫,有沒有這樣的表呢。
一,掌握許可權,理解下面4條基本上就差不多
1,mongodb是沒有默認管理員賬號,所以要先添加管理員賬號,在開啟許可權認證
2,切換到admin資料庫,添加的賬號才是管理員賬號。
3,用戶只能在用戶所在資料庫登錄,包括管理員賬號。
4,管理員可以管理所有資料庫,但是不能直接管理其他資料庫,要先在admin資料庫認證後才可以。這一點比較怪
二,添加管理員賬號
[root@localhost zhangy]# mongo
MongoDB shell version: 2.4.6
connecting to: tank
> use admin //切換到admin資料庫
switched to db admin
> show collections;
system.indexes
system.users //用戶表
> db.system.users.find(); //用戶表沒有數據
> db.addUser('tank','test'); //添加一個管理員賬號
{
"user" : "tank",
"readOnly" : false,
"pwd" : "",
"_id" : ObjectId("529e5d543b6a4608ac833429")
}

三,開啟動用戶許可權認證
[root@localhost zhangy]# vim /etc/mongodb.conf //將auth=true前面的注釋拿掉
[root@localhost zhangy]# /etc/init.d/mongod restart //重啟生效

四,用戶只能在用戶所在資料庫登錄,管理員需要通過admin認證後才能管理其他資料庫

[root@localhost zhangy]# mongo
MongoDB shell version: 2.4.6
connecting to: tank
> show dbs; //顯示所有資料庫失敗,因為還沒有認證
Wed Dec 4 06:39:50.925 listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:46
> db.auth('tank','test'); //認證失敗,因為這個用戶不屬於tank這個資料庫
Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" }
0
> use admin //切換到admin資料庫
switched to db admin
> db.auth('tank','test'); //在admin資料庫認證成功
> use tank; //切換到tank資料庫
switched to db tank
> show collections; //不會在提示沒有許可權了
contact
system.indexes
users

五,添加普通用啟
> use tank;
switched to db tank
> db.addUser('tank1','test'); //為tank資料庫添加了一個可讀寫用戶tank1
{
"_id" : ObjectId("529e5f8474b4c660718a70f3"),
"user" : "tank1",
"readOnly" : false,
"pwd" : ""
}
> db.addUser('tank2','test',true); //為tank資料庫添加了一個只讀用戶tank2
{
"user" : "tank2",
"readOnly" : true,
"pwd" : "",
"_id" : ObjectId("529e67553992b24438d5e315")
}
> exit //退出
bye
[root@localhost zhangy]# mongo
MongoDB shell version: 2.4.6
connecting to: tank
> db.auth('tank1','test'); //剛添加的用戶可以登錄。

六,php客戶端連接
1, 推薦方法一
$mongo = new Mongo();

$db = $mongo->selectDB('tank'); //切換到tank資料庫

$db->authenticate("tank3", "test"); //認證

$users= $db->selectCollection("users"); //選取users表

$cursor = $users->find(); //讀取數據

foreach ($cursor as $id => $value) {
echo "$id: "; print_r($value); echo "<br>";
}

這種方式比較好理解,根命令行下的操作過程差不多。
2,推薦方法二
$mongo = new Mongo("mongodb://tank3:[email protected]:27017/tank"); //認證用戶,這里的資料庫,只啟認證作用

$db = $mongo->selectDB('tank'); //選取資料庫

$users= $db->selectCollection("users");

$cursor = $users->find();

foreach ($cursor as $id => $value) {
echo "$id: "; print_r($value); echo "<br>";
}

上面二種方法的不同在於,一個先選資料庫在認證,一個先認證在選資料庫。

⑨ 如何設計MongoDB數據模型

這個問題需要考慮的復太制多
首先你的了解關系資料庫的設計模式。
mongodb的數據模型的設計和關系資料庫的有些不同。(原理是一樣的)
新系統設計和基於原有系統的設計也可能不同
你找找看,基本上每本關於mondodb的參考是基本上都有一些介紹
不過需要自己總結總結,根據自己的業務具體分析

熱點內容
美發店認證 發布:2021-03-16 21:43:38 瀏覽:443
物業糾紛原因 發布:2021-03-16 21:42:46 瀏覽:474
全國著名不孕不育醫院 發布:2021-03-16 21:42:24 瀏覽:679
知名明星確診 發布:2021-03-16 21:42:04 瀏覽:14
ipad大專有用嗎 發布:2021-03-16 21:40:58 瀏覽:670
公務員協議班值得嗎 發布:2021-03-16 21:40:00 瀏覽:21
知名書店品牌 發布:2021-03-16 21:39:09 瀏覽:949
q雷授權碼在哪裡買 發布:2021-03-16 21:38:44 瀏覽:852
圖書天貓轉讓 發布:2021-03-16 21:38:26 瀏覽:707
寶寶水杯品牌 發布:2021-03-16 21:35:56 瀏覽:837