上一篇文章,把这个架构的起因,和操作系统的选择进行了详细说明。
原文地址:15分钟从零开始搭建支持10w+用户的生产环境(一)
?
二、数据库的选择
对于一个10W+用户的系统,数据库选择很重要。
一般来说,这个用户量,根据不同的应用,会形成单表年度400W~4000W条的数据量。在这个数据量下,我们需要相对大型的数据库。
可供选择的主流数据库:
类别 |
数据库 |
|
关系型数据库
MysqL,sql Server for Linux,Oracle,DB2,PostgreDB
Nosql数据库
Radis,HBase,MongoDB
具体数据库的区别分析,网上有很多文章,这儿就不再多讨论。
?
在现在讨论的这个架构下,有几个要求:
- 数据库要是免费的;
- 数据库的安装要简单;
- 数据库的使用要方便。这个使用,包括管理和开发;
- 最重要的一点,是数据后期可扩展成分布式架构,以保证在不改动代码的情况下,支持B、C轮的数据:P。
在这个要求下,我们选择MongoDB作为主数据库。
MongoDB的官网: https://www.mongodb.com
MongoDB最新版下载: https://www.mongodb.com/download-center/community
community版和professional版本最大的区别是pro版有InMemoryDB模式,可以依托大内存建立存放在内存中的数据库文件。一般应用,社区版足够。
?
先看看MongoDB的安装有多简单:
第一步:下载数据库,以4.2.6 for Debian版本为例:
wget?https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian92-4.2.6.tgz
下载完成后,打开压缩包,
tar?xvf?mongodb-linux-x86_64-debian92-4.2.6.tgz?-C?/your_folder
我们会得到以下文件,
-rw-r--r--?1?test?test??30608?Apr?17?11:10?LICENSE-Community.txt
-rw-r--r--?1?test??16726?Apr?17?11:10?MPL-2
-rw-r--r--?1?test???2617?Apr?17?11:10?README
-rw-r--r--?1?test??75405?Apr?17?11:10?THIRD-PARTY-NOTICES
-rw-r--r--?1?test?183512?Apr?17?11:13?THIRD-PARTY-NOTICES.gotools
drwxr-xr-x?2?test???4096?Apr?20?19:29?bin
bin目录中,有以下文件,
-rwxr-xr-x?1?test?12715648?Apr?17?11:12?bsondump
-rwxr-xr-x?1?test?????7694?Apr?17?11:36?install_compass
-rwxr-xr-x?1?test?47998920?Apr?17?11:36?mongo
-rwxr-xr-x?1?test?73240640?Apr?17?11:36?mongod
-rwxr-xr-x?1?test?17526720?Apr?17?11:12?mongodump
-rwxr-xr-x?1?test?17277000?Apr?17?11:12?mongoexport
-rwxr-xr-x?1?test?17242056?Apr?17?11:12?mongofiles
-rwxr-xr-x?1?test?17452192?Apr?17?11:12?mongoimport
-rwxr-xr-x?1?test?17879808?Apr?17?11:13?mongoreplay
-rwxr-xr-x?1?test?17851848?Apr?17?11:12?mongorestore
-rwxr-xr-x?1?test?40628464?Apr?17?11:36?mongos
-rwxr-xr-x?1?test?17029440?Apr?17?11:12?mongostat
-rwxr-xr-x?1?test?16707368?Apr?17?11:12?mongotop
其中:
mongo是个shell,用来操作数据库。
mongod是单个数据库的服务程序,每个数据库都需要一个mongod进程。
mongos是集群的路由和入口,做集群时必须要用到。
别的都是一些管理工具,可以慢慢了解。
第二步:安装&启动
MongoDB本身是一个绿色软件,上一节的下载和解压,就是安装的过程了。
下面是启动数据库。
./mongod?--dbpath?your_database_folder_path
MongoDB运行,只需要一个数据库文件的存放目录。
当你看到命令执行后,出现一大篇内容,其中有两行:
I??NETWORK??[listener]?Listening?on?127.0.0.1
I??NETWORK??[listener]?waiting?for?connections?on?port?27017
的时候,恭喜你,数据库已经上线了。
?
简单不?
但是一定要记着,运行简单并不等于这是个Access一样的小东西。
这是个大型的基于文档的Nosql数据库!
?
如果想查询各个命令都有什么参数,可以在命令后边加 --help 来查询。
例如:
./mongod?--help
里面有详细的说明。
?
下面列几个常用的参数:
参数
说明 |
config
配置文件。MongoDB除了直接用命令行参数外,也可以把参数写在一个配置文件中,然后在config参数引用这个配置文件
port
MongoDB默认端口是27017,可以改成任何端口
logpath
默认数据库日志是输出到终端的,可以改为保存到文件(也可以不用这个参数,而在命令行重定向)
bind_ip
MongoDB默认绑定IP是127.0.0.1,可以改成任意IP地址。
db_path
数据库文件的保存目录
?
下面,我们检查一下数据库的安装是否正确。
我们用mongo连到数据库进行操作:
$?./mongo?localhost:27017
MongoDB?shell?version?v4.2.5
>?use?TestDB
switched?to?db?TestDB
>?db.collection.insert({"user":"test1"})
WriteResult({?"nInserted"?:?1?})
>?db.collection."test2"})
WriteResult({?find()
{?"_id"?:?ObjectId("5ea0279699857fc83ddf6ef5"),?"user"?:?"test1"?}
>?db.collection.find({"test2"})
{?"5ea029a599857fc83ddf6ef6"),1); word-wrap: inherit !important; word-break: inherit !important">"test2"?}
>?exit
?
在这一节的最后,补充两个问题:
- 扩展性
上面介绍的是单MongoDB数据库的安装。这是最简单的一种形式,也是应用最多的一种形式。
如果数据很重要,为了防止任何情况的数据丢失,可以采用 Master + N Slave 的方式,做主从结构,把同样的多个库放到多个服务器上,互为备份。同时,这种方式还可以实现读写分离。
如果数据量再大,则可以把数据库扩展成集群,用以增加数据库的容量,并提升访问性能。
@H_502_342@
安全
上面介绍安装的时候,采用的默认端口。在实际使用时,可以改换一个端口,减少被扫描攻击的机率。
另外,数据库默认安装时,是不检查用户的。换言之,就是任何人都可以连到数据库。如果用在生产服务器上,一定要在数据库中建议用户和权限,以保证阻挡非法的访问。
MongoDB的安全问题,我会单独写一篇文章来说,敬请关注。
(未完待续)
?
?

微信公众号:老王Plus
扫描二维码,关注个人公众号,可以第一时间得到最新的个人文章和内容推送
本文版权归作者所有,转载请保留此声明和原文链接
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!