阿里云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亿元,峰值的交易量达到惊人的高度,背后离不开阿里云大数据计算和存储能力的支撑.在 ...
随机推荐
- SPOJ QTREE-Query on a tree-树链剖分-边权
用每个点代表父节点到此点的边.建立一一映射后就可以用点权的方法处理了. 注意的是路径两端节点的处理 #include <cstdio> #include <algorithm> ...
- 面向对象—的__new__()方法详解
[Python] Python 之 __new__() 方法与实例化 __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在 Python 中存在于类里面的构 ...
- HAOI2017 简要题解
「HAOI2017」新型城市化 题意 有一个 \(n\) 个点的无向图,其中只有 \(m\) 对点之间没有连边,保证这张图可以被分为至多两个团. 对于 \(m\) 对未连边的点对,判断有哪些点对满足将 ...
- BZOJ 5477: 星际穿越
当初随便出的一道 思博题 竟然被交换到了八中 QAQ 然后就上了 BZOJ ...作为原作者还是把原来写的详细题解放出来吧 qwq 题意 \(n\) 个点的数,每个点初始有权值 \(v_i\) ,需要 ...
- 自动驾驶技术之——无人驾驶中的CAN总线
CAN总线在整个无人驾驶系统中有着十分重要的作用.除了在VCU信号需要通过CAN总线进行传输外,无人车上的某些传感器(如雷达.Mobileye)的信号传递也是通过CAN实现的. 前言 本文主要内容是— ...
- CSharp for Jupyter Notebook
之前说有机会就说下Linux下如何搭建C#版的交互编程,今天写篇文章还债^_^ Win下比较简单,可以自己看官方文档,下面逆天带大家搭建下Linux下的环境(官方方法有问题) 在线预览:https:/ ...
- js 触摸的Event--获取触摸位置
继上一篇js原生拖拽之后,现在又来写一下移动端touch列表,获取触摸位置.pc端的event事件,鼠标的位置信息在上一篇,点此进入上一篇. touch有3个事件:touchstart,touchmo ...
- Opennebula常用命令
查看虚拟机状态信息: [oneadmin@localhost /]$ onevm list 查看虚拟机配置: [oneadmin@localhost /]$ onevm show 25 启动虚拟机: ...
- Home School Books美国家庭学校教育小学初中高中全套美语教材
加州的资料总共买过三次: ①优妈妈儿童教育,买过美国加州小学一.二年级的语文及相应的练习册,并买了纸版资料. (这是自己学习用的) ②美国加州原版小学教材Reading Wonders 2014新版语 ...
- eclipse 设置
修改工作空间默认编码:Window --> Preferences --> General --> Workspace --> Text file encoding --> ...