MongoDB那些事儿

本文探讨了MongoDB在时区处理上的特点,指出了其使用格林尼治时间并介绍了如何配置时区。此外,文章还介绍了多种MongoDB数据库同步工具,如MongoShake、mongosync和Change Streams,并简要说明了MongoDB的索引优化策略和存储内容的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、时区问题

mongodb里存储的date比正常时间少8小时,那是因为它用的是格林尼治时间,new Date()的时候创建的是本地时间(北京时间),位于东八区,springboot配置里添加如下配置即可指定时区和返回的日期的格式:

#处理时区问题
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss.SSS
spring.jackson.time-zone=GMT+8

在从mongodb里查出来数据的时候,会自动转换成本地时间(java自己做的事儿)。也就是程序里new Date()的时候比如是(北京时间)2020-06-20 18:20:20.123 到了mongodb里就变成了(格林尼治时间)2020-06-20 10:20:20.123 ,接着查出来的数据会自动处理成本地时间2020-06-20 18:20:20.123,造成的影响仅仅是通过脚本查看数据库数据的时间,java会自动处理成本地时间,这个无需自己处理,要想统一化,就用String类型的时间或者long类型的时间(使用long存储的时候不太友好,一串数字谁知道是猴年马月)。

MongoDB公司比较无所谓,不给设置时区,所以统一都是格林尼治时间。。。(此处应该拉出去批评10分钟)

二、数据库同步工具

1、MongoShake 

阿里巴巴的  MongoShake ,目前可以支持到MongoDB4.X(我测试从mongodb3.2.16同步数据到mongodb4.0.4没问题)

延迟2s左右

官方地址: https://github.com/alibaba/MongoShake

中文介绍地址: MongoShake——基于MongoDB的跨数据中心的数据复制平台-阿里云开发者社区

测试结果地址:https://github.com/alibaba/MongoShake/wiki/MongoShake-Performance-Document?spm=a2c4e.10696291.0.0.4e1519a4gci01L

2、mongosync

mongosync下载地址:
http://dl.nosqldb.org/mongosync
使用手册:
http://dl.nosqldb.org/mongosync_user_guide_zh_CN.pdf

3、Change Streams

构建实时同步数据流完美数据迁移-MongoDB Stream的应用-腾讯云开发者社区-腾讯云

4、Magisync

5、kettle

官网:http://wiki.pentaho.com/display/EAI/MongoDB+Input

三、关于索引

MongoDB的索引不像MySQL那样有最左原则(MySQL的最左原则:有索引 abcIndexMysql(a,b,c)查询语句命中a,ab,abc皆可以走索引,但是跳过a或者ab就无法走索引,详细介绍MySQL索引相关请点击快速通道:闪现一下你就知道),MongoDB的索引是由搜索引擎自动优化的,可以跳过前边若干个比如:有索引 abcIndexMongoDB(a,b,c),不管你怎么写查询,只要包含在a,b,c中就可以了,方便吧,省心吧,就问你爽不爽。

四、关于存储内容

非关系型的数据库知道吧,不用行列对应那么整齐,同一个collection中第一行你想存name,age,gender可以有,第二行你想存name,price,address,phone,也可以,不过虽然是非关系型的,也不能乱用,最好是每个collection存放一类数据,只是这类数据需要存储的字段可能有些差异(大致相同),存储结构是类似于json数据结构的bson,存储的数据可以用JSONObject接收,也可以映射成实体,看具体需求吧,就是MongoDB的语句和api用起来比较有挑战,特别是遇见复杂的查询的时候,比如MySQL里边的A and B and C and (D or E)猜猜MongoDB里边怎么写?api又怎么拼装?这个找一个专题来写吧,详情请关注 MongoDB的增删改查语法和api的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值