架构师
文章平均质量分 93
向着风奔跑
在oppo互联网服务
展开
-
MongoDB聚合和索引
MongoDB聚合框架是一个计算框架作用在一个或几个集合对集合中的数据进行一系列运算将这些数据转化为期望的形式Aggregation Pipeline Stages — MongoDB Manual1、MongoDB聚合操作原始数据db.orders.insertMany([{ zip:"000001", phone:"13101010101", name:"LiuBei", status:"created", shippingFee:10, orderLi.原创 2022-03-22 19:25:56 · 1755 阅读 · 0 评论 -
MongoDB的CRUD
Create 创建Insert Methods — MongoDB Manualdb.集合.insertOne(<JSON对象>) // 添加单个文档db.集合.insertMany([{<JSON对象1>},{<JSON对象2>}]) // 批量添加文档db.集合.insert() // 添加单个文档insertOne, 和 insertMany命令不支持 explain命令insert支持 explain命令insertOne原创 2022-03-22 19:19:01 · 1495 阅读 · 0 评论 -
架构师-Netty(六)
channelChannel是Netty抽象出来的网络操作抽象类JDK NIO原生的Channel缺点:JDK的SocketChannel和ServerSocketChannel没有统一的Channel接口JDK的SocketChannel和ServerSocketChannel的主要职责就是网络I/O操作,SPI接口,具体有虚拟接厂家提供,实现其抽象类,其工作量和重新开发一个新的Cha...原创 2020-02-07 12:07:40 · 200 阅读 · 0 评论 -
架构师-Netty(五)
Buffer和相关辅助类ByteBuffer常用的缓冲区JDK NIO 类库 java.nio.BufferJDK提供的ByteBuffer可以满足NIO编程,但有其局限性:ByteBuffer 长度固定,不能自动扩缩容,编程对象POJO大于ByteBuffer的容量时,或发生索引越界异常ByteBuffer只有一个标识位置的指针position,读写的时候需要手工调用flip()和...原创 2020-02-05 17:28:09 · 453 阅读 · 0 评论 -
架构师-Netty(三)
《Netty权威指南》TCP粘包/拆包TCP粘包/拆包发生原因:应用程序write写入的字节大小大于套接口发送的缓冲区大小;进行MSS大小的TCP分段以太网帧的payload大小MTU进行IP分片...原创 2020-02-02 19:56:01 · 311 阅读 · 0 评论 -
架构师-Netty(二)
NettyNetty 支持的功能与特性Netty 是一个异步、事件驱动的用来做高性能、高可靠性的网络应用框架。主要的优点有:框架设计优雅,底层模型随意切换适应不同的网络协议要求。提供很多标准的协议、安全、编码解码的支持。解决了很多 NIO 不易用的问题。社区更为活跃,在很多开源框架中使用,如 Dubbo、RocketMQ、Spark 等。上图体现的主要是 Netty 支持的功能...原创 2020-02-01 21:42:34 · 2172 阅读 · 0 评论 -
架构师-Netty(一)
IO概念阻塞(Block)和非阻塞(Non-Block)阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候。阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待在那里。非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经准备好,也直接返回。同步(Synchronization)和...原创 2020-02-01 12:40:40 · 321 阅读 · 0 评论 -
架构师-Redis(四)
数据一致性缓存使用场景针对读多写少的高并发场景,我们可以使用缓存来提升查询速度。当我们使用 Redis 作为缓存的时候,一般流程是这样的:1、如果数据在 Redis 存在,应用就可以直接从 Redis 拿到数据,不用访问数据库。2、如果 Redis 里面没有,先到数据库查询,然后写入到 Redis,再返回给应用。一致性问题的定义因为这些数据是很少修改的,所以在绝大部分的情况下可以...原创 2020-01-30 19:45:32 · 377 阅读 · 0 评论 -
架构师-Redis(三)
为什么需要 Redis 集群性能Redis 本身的 QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是 会受到影响。这个时候我们希望有更多的 Redis 服务来完成工作扩展第二个是出于存储的考虑。因为 Redis 所有的数据都放在内存中,如果数据量大, 很容易受到硬件的限制。升级硬件收效和成本比太低,所以我们需要有一种横向扩展的方法可用性第三个是可用...原创 2020-01-30 16:18:10 · 2709 阅读 · 0 评论 -
架构师-Redis(二)
Lua脚本发布与订阅Key过期策略事务持久化RDBAOF事件文件事件事件事件原创 2020-01-29 11:45:21 · 1129 阅读 · 0 评论 -
架构师-Redis(一)
参考资料官网源码《Redis设计与实现》黄健宏《Redis5设计与源码分析》 陈雷背景redis官网定义诞生历程08年意大利西西里岛的小伙子antirez创建 了一个访客信息网站 LLOOGG.COM。记录需要知道网站的访问情况,比如访客的 IP、操作系统、浏览器、使用的搜索关键词、所在地区、访问的网页地址等等。在 国内,有很多网站提供了这个功能,比如 CNZZ,百度统计,...原创 2020-01-14 20:45:36 · 690 阅读 · 0 评论 -
架构师-kafka(四)
高级特性除了正常的消息发送和消费,在使用 Kaflca 的过程中难免会遇到一些其他高级应用类的需求消费回溯 可以通过原生 Kaflca 提供的KaflcaConsumer.seek()方法来实现延时队列消息轨迹kafka原生没有提供上面的高级特性,可以通过一定的手段来扩展 Kaflca,RabbitMQ, 使用到了延时队列、消息轨迹过期时间(TTL)可以通过消息times...原创 2020-01-12 19:49:39 · 460 阅读 · 0 评论 -
架构师-kafka(三)
生产端分区器(Partitioner)-消息分发kafka消息分发策略消息是kafka中最基本的数据单元,在kafka中,一条消息由key、value两部分构成,在发送一条消息时,我们可以指定这个key,那么producer会根据key和partition机制来判断当前这条消息应该发送并存储到哪个partition中。我们可以根据需要进行扩展producer的partition机制。自定义...原创 2020-01-10 19:50:38 · 650 阅读 · 0 评论 -
架构师-kafka(二)
Java中使用kafka<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.0.0</version></dependency>生产者...原创 2020-01-06 20:28:14 · 358 阅读 · 0 评论 -
架构师-kafka(一)
参考资料官网《深入理解Kafka 核心设计与实践原理》朱忠华著什么是KafkaApache Kafka® is a distributed streaming platformA streaming platform has three key capabilities:Publish and subscribe to streams of records, similar t...原创 2020-01-05 16:08:13 · 723 阅读 · 0 评论 -
架构师-消息中间件思考
场景分析在单应用情况下,同一个进程中,我们可以使用阻塞队列+线程池来实现生产者消费者模式。比如说在一个应用中,A方法调用B方法去执行一些任务处理。我们可以同步调用。但是如果这个时候请求比较多的情况下,同步调用比较耗时会导致请求阻塞。我们会使用阻塞队列加线程池来实现异步任务的处理。那么,问题来了,如果是在分布式系统中,两个服务之间需要通过这种异步队列的方式来处理任务,那单进程级别的队列就无法...原创 2020-01-05 13:19:33 · 468 阅读 · 0 评论 -
架构师-RocketMQ(二)
RocketMQ特性削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)蓄流压测(线上有些链路不好压测,可以通过堆积一定量消息再放开来压测)目前主流的MQ主要是Rocketmq、kafka、Rabbitmq,Rock...原创 2020-01-04 11:47:14 · 708 阅读 · 0 评论 -
架构师-RocketMQ(一)
参考资料:官网《RocketMQ实战与原理解析》杨开元著RocketMQ发展历史RocketMq是一个由阿里巴巴开源的消息中间件, 2012年开源,2017年成为apache顶级项目。它的核心设计借鉴了Kafka,所以我们在了解RocketMQ的时候,会发现很多和kafka相同的特性。同时呢,Rocket在某些功能上和kafka又有较大的差异,接下来我们就去了解RocketMQ(...原创 2020-01-02 22:24:09 · 679 阅读 · 0 评论 -
架构师-分布式事务
在分布式情况下,也需要事务操作,例如老生常谈的银行转账功能,必然面临分布式事务,先说下本地事务事务事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制本地数据库ACID...原创 2019-12-31 21:13:46 · 480 阅读 · 0 评论 -
架构师-JVM(二)
JVM参数标准参数-version-help -server -cpC:\Users\Administrator>java -versionjava version "1.8.0_231"Java(TM) SE Runtime Environment (build 1.8.0_231-b11)Java HotSpot(TM) 64-Bit Server VM (build...原创 2019-12-28 10:01:15 · 204 阅读 · 0 评论 -
架构师-JVM(一)
参考资料:官网《深入理解Java虚拟机:JVM高级特性与最佳实践》葛一鸣老师的《实战Java虚拟机》类加载机制运行时数据区JVM内存模型垃圾回收JVM 调优工具JVM 性能优化探讨...原创 2019-12-26 21:53:27 · 333 阅读 · 0 评论