mongodb在我这个C#下手眼中-01初识
虽然不是技术大牛,但是组长推荐看一下,而且我们正在做的项目,类似于资源中心,牵扯到各种怪异数据类型不同分库,所以至今都是采用这种方式:
①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#接轨
mongodb在我这个C#下手眼中-01初识的更多相关文章
- TensorFlow --- 01初识
由于博客园对Markdown支持不够友好,阅读此文请前往云栖社区:TensorFlow --- 01初识
- day24 01 初识继承
day24 01 初识继承 面向对象的三大特性:继承,多态,封装 一.继承的概念 继承:是一种创建新类的方式,新建的类可以继承一个或者多个父类,父类又可称基类或超类,新建的类称为派生类或者子类 cla ...
- day22 01 初识面向对象----简单的人狗大战小游戏
day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战 怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...
- 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字
081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
- 079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象
079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象 本文知识点:实例化对象 说明:因为时间紧张,本人写博客过程中只是对知 ...
- 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类
078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...
- 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象
077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
- 076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学
076 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 01 Java面向对象导学 本文知识点:Java面向对象导学 说明:因为时间紧张,本人 ...
随机推荐
- 修复xcode6.2 插件不能使用问题
在终端输入以下命令即可: find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -m ...
- 翻译-QPKG开发工具快速开始指南
QPKG开发工具快速开始指南 指导你编译你自己的QPKG软件包 目录 什么是QDK 下载QDK 安装QDK 编译你自己的QPKG软件包 搭建QPKG编译环境 配置QPKG 定制QPKG程序 向QPKG ...
- 使用Qt框架开发http服务器问题的记录
最近需求需要开发一款 HTTP ,然后由于先前接触过Qt,就直接用Qt写HTTP服务器了,也是为了当作练手,要不然是直接上HTTP框架的. 后端用C++ Qt框架 前端为了练手 当然是纯生的 js h ...
- P2059 [JLOI2013]卡牌游戏
题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把 ...
- Java集合源码 -- List列表
List概述 List是一个有序,可重复的集合,可以在List的中间插入和移除元素,根据整数索引访问元素 下图是List集合的框架图 下面是对上图的简单介绍 AbstractCollection: 提 ...
- Odoo工作流
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9281264.html 一:工作流 工作流是与业务流程相关联的模型,可用于跟踪工序的动态演变过程. 工作流.活动 ...
- Java特性之继承的应用
继承是为了复用,复用是为了减少冗余的代码,提高开发效率. 这次我讲继承,仅仅只是讲它在我开发中一个小小的应用,就是关于Controller日志打印.我们通常使用日志,要么是使用slf或者是log4j. ...
- DDL-数据类型
一.数值型1.整型tinyint.smallint.mediumint.int/integer.bigint1 2 3 4 8 特 ...
- ORACLE逐行累计求和方法(OVER函数)
1.RANK ( ) OVER ( [QUERY_PARTITION_CLAUSE] ORDER_BY_CLAUSE ) DENSE_RANK ( ) OVER ( [QUERY_PARTITION_ ...
- Java并发编程(七)终结线程
线程的状态 一个线程会有如下五个状态 1.新建:线程在被创建时会暂时处于这种状态,此时系统为线程分配资源并对其进行初始化 2.就绪:此时线程已经可以运行,只是系统没有为其分配CPU时间. 3.运行:系 ...