当前位置:首页 » 软件设计 » 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