阿里云MongoDB存储数据
近期上了个活动,考虑后期的运维及人力成本,还是选择了阿里云的MongoDB,不过阿里云这玩意本地测试官方没有给本地测试链接地址,只能做映射上去了测了。。。
选了个2核4G的,更多详细信息,可以去阿里上看:https://www.aliyun.com/product/mongodb

1.环境要求:Spring4.0 以上 Pom依赖:(通过java的方式连接mongodb)
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.4</version>
</dependency> <dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.7.1.RELEASE</version>
</dependency>
整合Spring
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> <!-- 这里需要指定一个Mongo URI来连接数据库,
需要的信息可以从阿里云控制台上获取
连接是帐号密码要跟帐号所在的数据库对应起来,否则无法通过认证
默认创建的root帐号是admin数据库下的 <bean class="com.mongodb.MongoURI" id="mongoURI">
<constructor-arg value="mongodb://root:xxxx:port,xxxx:port/database?replicaSet=xxx" />
</bean>
<bean class="com.mongodb.Mongo" id="mongo">
<constructor-arg ref="mongoURI" />
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo"/>
<constructor-arg name="databaseName" value="database"/>
</bean>--> <!-- 本地测试用
<mongo:mongo-client host="映射到阿里云的ip" port="xxxx" credentials="root:MonGo2016Website@database" id="mongo">
<mongo:client-options write-concern="SAFE"/>
</mongo:mongo-client>--> <mongo:mongo-client id="mongoClient" host="xxxxx" port="xxxxx" credentials="root:MonGo2016Website@database">
<mongo:client-options
connections-per-host="8"
threads-allowed-to-block-for-connection-multiplier="4"
connect-timeout="3000"
max-wait-time="10000"
socket-keep-alive="true"
socket-timeout="30000"
write-concern="SAFE"/>
</mongo:mongo-client> <mongo:db-factory id="mongoDbFactory" dbname="admin" mongo-ref="mongoClient" /> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean> </beans>
2.MongoDB增删改查操作类:
AccountsInfo为用户类:普通的一些属性加上一个List集合gamesTotal,没什么别的东西,存储到mongodb中的数据,为两层嵌套的
{
"_id" : 1,
"_class" : "com.odao.entity.AccountsInfo",
"userId" : 1,
"userName" : "xxxx",
"date" : "2016-11-23 09:53:07" ,
"gamesTotal" : [ ..... ]
}
具体的org.springframework.data.mongodb.core.MongoTemplate api操作,网上一大把,这里就只举个例子了
@Service
public class MongoDBServiceImpl implements MongoDBService<AccountsInfo>{ @Resource
MongoTemplate mongoTemplate; /**
* 保存信息
*/
@Override
public void saveAccountsInfo(AccountsInfo AccountsInfo) {
mongoTemplate.save(AccountsInfo);
} /**
* 根据用户Id查询用户信息
*/
@Override
public AccountsInfo getObjectByUserId(int userId) {
return mongoTemplate.findOne(new Query(Criteria.where("userId").is(userId)),AccountsInfo.class);
} /**
* 集合下新增数据
*/
@Override
public WriteResult putGameToAccounts(int userId,GamesTotal games) {
Query query = Query.query(Criteria.where("userId").is(userId));
Update update = new Update();
update.addToSet("gamesTotal", games);
return mongoTemplate.upsert(query, update, AccountsInfo.class);
} /**
* 更新
*/
@Override
public WriteResult updateGamesTotal(int userId,GamesTotal gamesTotal) {
Query query = new Query(Criteria.where("userId").is(userId).and("gamesTotal.gameId").is(gamesTotal.getGameId()));
Update update = new Update();
//首次进入时间
update.set("gamesTotal.$.firstEnterTime", gamesTotal.getFirstEnterTime()); 。。。。。。。 return mongoTemplate.updateFirst(query, update, AccountsInfo.class);
}
3.客户端工具用的是 NoSQL Manager for MongoDB Professional 破解版,用法很简单,稍稍研究下就可以了,注意点在配置连接的时候,要选择mongodb 3.x

上述通过映射的方式,也不知道什么情况,连接数会慢慢的增加,并没有被释放
db.serverStatus().connections
{ "current" : 73, "available" : 327, "internal_current" : 8, "internal_available" : 9992, "totalCreated" : NumberLong(290370)}
连接满了,就GG了,后来没办法,把所有连接mongodb的项目全改成阿里云的方式去连接,情况才好转。
如果有缘人看到这篇文章且恰好有解决方案,还望不吝赐教。。。
注意:阿里云会切换IP跟端口,切换IP跟端口,切换IP跟端口,重要的事情说三遍,
也就是说,线上最好是不要采用映射来连接mongodb,否则什么时候挂掉的都不知道,还是放阿里云的服务器上放心。
以上就时使用阿里云mongodb大致的一个流程,有不懂的童鞋,可以留言。。。。我看到了就会回的。。。
db.serverStatus().connections
-->
db.serverStatus().connections
-->
阿里云MongoDB存储数据的更多相关文章
- 为数据计算提供强力引擎,阿里云文件存储HDFS v1.0公测发布
在2019年3月的北京云栖峰会上,阿里云正式推出全球首个云原生HDFS存储服务—文件存储HDFS,为数据分析业务在云上提供可线性扩展的吞吐能力和免运维的快速弹性伸缩能力,降低用户TCO.阿里云文件存储 ...
- 基于PHP实现阿里云开放存储服务
开放存储服务(OpenStorageService,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务.用户可以通过简单的API(REST方式的接口),在任何时间.任何地点.任何互 ...
- java开发之阿里云对象存储OSS和云数据库Memcache的使用
web开发中标配:aliyun ECS(阿里云服务器),aliyun RDS(阿里云数据库),aliyun OSS(阿里云对象存储),aliyun Memcache(阿里云缓存数据库). 今天就介绍下 ...
- 阿里云对象存储 OSS 应用服务器搭建代码
背景说明 最近做一个APP客户端图片直传阿里云OSS的服务,需要在后台开一个阿里云的OSSToken获取的接口. 阿里云官方文档地址:快速搭建移动应用直传服务. 略过移动端说明,直接看服务端的. 不是 ...
- 阿里云对象存储OSS与文件存储NAS的区别
一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...
- 备份MySQL数据库并上传到阿里云OSS存储
1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 官网及文档: htt ...
- 阿里云对象存储OSS
阿里云的产品种类繁多,今天让我们一起来了解下对象存储(Object Storage Service,简称OSS)吧! 什么是对象存储呢? 简单来说,对象存储OSS是阿里云提供的海量.安全和高可靠的云存 ...
- AI加持的阿里云飞天大数据平台技术揭秘
摘要:2019云栖大会大数据&AI专场,阿里云智能计算平台事业部研究员关涛.资深专家徐晟来为我们分享<AI加持的阿里云飞天大数据平台技术揭秘>.本文主要讲了三大部分,一是原创技术优 ...
- 阿里云文件存储(NAS)助力业务系统承载双十一尖峰流量
2018天猫双11全球狂欢节,全天成交额再次刷新纪录达到2135亿元,其中总成交额在开场后仅仅用了2分05秒即突破100亿元,峰值的交易量达到惊人的高度,背后离不开阿里云大数据计算和存储能力的支撑.在 ...
随机推荐
- 【妙味课堂】JS热身课后习题
<!--*** @Author: wyy* @Date: 2018-04-15 17:36:35* @Email: 2752154874@qq.com* @Last Modified by: w ...
- IDEA 根据 Mysql 自动生成
1 找到 没有的,file--project structure--modules--+--JPA 2 找到如下 添加Mysql连接,记得 Text Connecting一下看看 然后刷新,就可以出 ...
- Codeforces543 B. Destroying Roads
传送门:>Here< 题意:给出一张无向图(边权为1),并给出两对起点和终点以及距离:s1,t1,l1; s2,t2,l2; 要求删除尽量多的边,使得dis(s1,t1)<=l1, ...
- robotframework中RIDE的下载及安装
1.首先说一下我当前的环境配置 win10系统64位 python3.6.5,已配置环境变量 2.安装RIDE前需要安装的依赖包(使用pip就可以直接安装) 首先必须有robotframework这就 ...
- MySQL 练习题 附答案,未完
综合练习题 表结构 整合一下方便查看 teacher student course scors 练习题 1.自行创建测试数据 create table student( sid int prima ...
- Vue中的计算属性与$watch
计算属性:在模板中绑定表达式是非常便利的,但是他们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么vue.js将绑定表达式限制为一个表达式. ...
- BZOJ3566: [SHOI2014]概率充电器 树形+概率dp
3566: [SHOI2014]概率充电器 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 1888 Solved: 857[Submit][Stat ...
- [luogu1970][花匠]
题目地址 https://www.luogu.org/problemnew/show/P1970 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部 ...
- 第四篇-以ConstraintLayout进行Android界面设计
此文章基于第三篇. 一.新建一个layout.xml文件,创建方法不再赘述,在Design界面右击LinearLayout,点击Convert LinearLayout to ConstraintLa ...
- semantic ui框架学习笔记一
面包屑导航 面包屑导航经常用于多个栏目下的内容管理,是web页面里比较常用的组合.例如: <div class="ui breadcrumb"> <a class ...