虽然不是技术大牛,但是组长推荐看一下,而且我们正在做的项目,类似于资源中心,牵扯到各种怪异数据类型不同分库,所以至今都是采用这种方式:
①MainData表存所有值,变化最大的分库数据用json存储
②json所有的字段都对应着一个index表,用于索引
③一个metadata表存储所有可能的json字段
④如果字段是选择类型的值,则由一个新表储存
从这个框架看来,的确不错,但是问题就在于json和其他表的配合上,比如插入、修改、更新,会比较疯狂的……
既然数据的人类可识别反序列化方式是两种,也就是xml和json,而且mongodb的方式也类似于这个,我们就可以从此数据库下手了。
首先提到它的windows版本和安装相关的,既然说到数据库,就不得不提及mongo的多平台版本,真的和微软是反调,不过随之而来的问题也来了,那就是微软只关注自己的平台,所以自己做得东西肯定很好用。那mongo的操作界面是什么呢?很可惜官方提供的shell只有命令行,至今还没有正式推出一个十分好用的UI,所以我们只能借助于第三方。
先从官方网站下载mongo:http://mongodb.org/
我此时用的版本是3.0。找个地方安装,这个过程很快,当然数据库这东西还是推荐64位系统,可能在win7下需要更新一个补丁,后期版本可能会有变动。
之后你会发现安装主目录会多出很多命令行工具,这都是代码编写人员的最爱啊……虽然我对自己的打字并没有信心
最重要的就是mongod.exe服务和mongo.exe操作端,当然其他的比如监视工具导入导出工具也是作为数据库管理人员必备的,所以这个目录里的东西想用好,你得学习一些命令行的知识,比如cmd,比如系统环境变量,让你启动他们更快速。
那,如何启动呢?mongodb的主要的启动方式是通过读取config配置文件,借助mongod宿主启动一个服务端,具体的config配置可以去手册查看,很详细,也很复杂,下面我发出一个比较简单的配置,这是一个YAML配置,是mongo支持的第二种方式,也是新的方式:
systemLog: destination: file ###日志存储位置 path: C:\data\mongodb_simple\log/mongod.log logAppend: true storage: ##journal配置 journal: enabled: true ##数据文件存储位置 dbPath: C:\data\mongodb_simple\data ##是否一个库一个文件夹 directoryPerDB: true ##数据引擎 engine: wiredTiger ##WT引擎配置 wiredTiger: engineConfig: ##WT最大使用cache(根据服务器实际情况调节) cacheSizeGB: 4 ##是否将索引也按数据库名单独存储 directoryForIndexes: true ##表压缩配置 collectionConfig: blockCompressor: zlib ##索引配置 indexConfig: prefixCompression: true ##端口配置 net: port: 27017
接下来就是启动了,这里我用的绝对路径,看起来也比较直观,就是给程序一个参数-f:
"C:\Program Files\MongoDB\Server\3.0\bin\mongod.exe" -f "C:\data\mongodb_simple\conf\simple1.conf"
ok,如果数据库无法启动,你可以先启动cmd,在命令行里执行一次这段,看看返回的提示是什么,这是最简单直观的方式了。下面我们尝试一下如何用简单的shell提供程序操作数据库。简单的启动一下mongo.exe,连接至数据库:
C:\Users\zhouzhi>"C:\Program Files\MongoDB\Server\3.0\bin\mongo.exe" 2015-09-30T14:23:39.621+0800 I CONTROL Hotfix KB2731284 or later update is installed, no need to zero-out data files MongoDB shell version: 3.0.1 connecting to: test >
这里我直接执行了mongo.exe,没有附加任何参数,直连localhost:27017的默认位置,看到它在连接成功后也自动跳转到test库下,那我们看一下这个数据库存在几个库:
> show dbs local 0.000GB test 0.000GB >
mongo.exe经常被称为shell,它以JavaScript为主,附加的一些自定义为辅,构成的一套命令脚本,show dbs 这个内置命令,就显示出了含有的库,当然如果你从未操作过的话是不会存在库的。
接下来我进入一个库,并插入一条记录:
connecting to: test > show dbs local 0.000GB test 0.000GB > use text switched to db text > db.MainData.insert({name:‘3tai‘,age:25,url:‘http://www.cnblogs.com/3Tai/‘,time:new Date()}) WriteResult({ "nInserted" : 1 }) >
我们在插入时,使用的是JavaScript的基本写法,这里要注意的是字符串、数字、时间,有这几个不同的类型,执行后提示有一处改动,下面我们查看一下刚才插入的文档,这里使用最简单直接的全部检索:
> db.MainData.find().pretty() { "_id" : ObjectId("560b83be22f39ad2d6004365"), "name" : "3tai", "age" : 25, "url" : "http://www.cnblogs.com/3Tai/", "time" : ISODate("2015-09-30T06:39:58.788Z") } >
使用find函数,可以获取结果,后面的pretty函数,可以格式化结果,是属于优化输出效果的。
至此,我们已经成功运行了mongodb,下一次我们和C#接轨