近期上了个活动,考虑后期的运维及人力成本,还是选择了阿里云的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存储数据的更多相关文章

  1. 为数据计算提供强力引擎,阿里云文件存储HDFS v1.0公测发布

    在2019年3月的北京云栖峰会上,阿里云正式推出全球首个云原生HDFS存储服务—文件存储HDFS,为数据分析业务在云上提供可线性扩展的吞吐能力和免运维的快速弹性伸缩能力,降低用户TCO.阿里云文件存储 ...

  2. 基于PHP实现阿里云开放存储服务

    开放存储服务(OpenStorageService,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务.用户可以通过简单的API(REST方式的接口),在任何时间.任何地点.任何互 ...

  3. java开发之阿里云对象存储OSS和云数据库Memcache的使用

    web开发中标配:aliyun ECS(阿里云服务器),aliyun RDS(阿里云数据库),aliyun OSS(阿里云对象存储),aliyun Memcache(阿里云缓存数据库). 今天就介绍下 ...

  4. 阿里云对象存储 OSS 应用服务器搭建代码

    背景说明 最近做一个APP客户端图片直传阿里云OSS的服务,需要在后台开一个阿里云的OSSToken获取的接口. 阿里云官方文档地址:快速搭建移动应用直传服务. 略过移动端说明,直接看服务端的. 不是 ...

  5. 阿里云对象存储OSS与文件存储NAS的区别

    一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...

  6. 备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 官网及文档: htt ...

  7. 阿里云对象存储OSS

    阿里云的产品种类繁多,今天让我们一起来了解下对象存储(Object Storage Service,简称OSS)吧! 什么是对象存储呢? 简单来说,对象存储OSS是阿里云提供的海量.安全和高可靠的云存 ...

  8. AI加持的阿里云飞天大数据平台技术揭秘

    摘要:2019云栖大会大数据&AI专场,阿里云智能计算平台事业部研究员关涛.资深专家徐晟来为我们分享<AI加持的阿里云飞天大数据平台技术揭秘>.本文主要讲了三大部分,一是原创技术优 ...

  9. 阿里云文件存储(NAS)助力业务系统承载双十一尖峰流量

    2018天猫双11全球狂欢节,全天成交额再次刷新纪录达到2135亿元,其中总成交额在开场后仅仅用了2分05秒即突破100亿元,峰值的交易量达到惊人的高度,背后离不开阿里云大数据计算和存储能力的支撑.在 ...

随机推荐

  1. 洛谷P2918 [USACO08NOV]买干草(一道完全背包模板题)

    题目链接 很明显的一道完全背包板子题,做法也很简单,就是要注意 这里你可以买比所需多的干草,只要达到数量就行了 状态转移方程:dp[j]=min(dp[j],dp[j-m[i]]+c[i]) 代码如下 ...

  2. Spring04-SpringEL&Spring JDBC数据访问

    一. SpringEL入门 Spring动态语言(简称SpEL) 是一个支持运行时查询和操作对象图的强大的动态语言,语法类似于EL表达式,具有诸如显示方法和基本字符串模板函数等特性. 1. 准备工作 ...

  3. MT【271】一道三角最值问题

    若不等式$k\sin^2B+\sin A\sin C>19\sin B\sin C$对任意$\Delta ABC$都成立,则$k$的最小值为_____ 分析:由正弦定理得$k>\dfrac ...

  4. #565. 「LibreOJ Round #10」mathematican 的二进制(期望 + 分治NTT)

    题面 戳这里,题意简单易懂. 题解 首先我们发现,操作是可以不考虑顺序的,因为每次操作会加一个 \(1\) ,每次进位会减少一个 \(1\) ,我们就可以考虑最后 \(1\) 的个数(也就是最后的和) ...

  5. Vert.x系列(三)--ClusteredEventBus源码分析

    前言:因为ClusteredEventBus涉及集群,有必产生网络问题,从而引入了NetServer.ServerID等涉及网络,端口的类.在之前的EventBusImpl中, 使用的数据结构是以ad ...

  6. javascript之判断专题

    javascript有数组,对象,函数,字符串,布尔,还有Symbol,set,map,weakset,weakmap. 判断这些东西也是有很多坑,像原生的typeof,instanceOf有一些bu ...

  7. Windows下安装flask虚拟环境

    前提 已经安装好python2.x或者pyhton3.x的条件下,使用pip包管理工具 flask框架就不作介绍直接安装 开始安装 1. 命令窗口下: 进入windows的命令窗口有三种方式: 第一种 ...

  8. Spring 声明式事务

    事务的特性/概念 事务:一组操作要么都成功要么失败: 事务的四个关键属性(ACID): 原子性(atomicity):“原子”的本意是“不可再分”,事务的原子性表现为一个事务中涉及到的多个操作在逻辑上 ...

  9. P1637 三元上升子序列

    thair 好,这个naive的东西因为只有三元,很好求解.只要把每个数之前小的L[i]与之后大的R[i]求一下即可. 求两次逆序对即可.那么答案便是∑(L[i]*R[i]); 对于更高元的,胡雨菲写 ...

  10. UOJ176 新年的繁荣

    题目链接 Boruvka生成树算法 \(Boruvka\)算法就是先把每个点看作一个联通块,然后不断在联通块之间找最优的边进行合并.因为每次联通块的数量最少缩小一半.所以合并次数是\(log\)的 先 ...