mongodb实验报告_Dropwizard,MongoDB和Gradle实验

mongodb实验报告

介绍

我使用Dropwizard,MongoDB和Gradle创建了一个小项目。 它实际上是作为一个实验性的Guava缓存开始的,作为将计数器发送到MongoDB(或任何其他DB)的缓冲区。 我也想尝试MondleDB插件的Gradle。 接下来,我想创建某种界面来检查此框架,因此我决定尝试使用DropWizard。 这就是这个项目的创建方式。

本文不是使用任何选定技术的教程。 这是一个小展示柜,我做过实验。 我猜有一些缺陷,也许我没有使用所有“最佳实践”。 但是,我确实相信,在本文的帮助下,该项目可以成为我使用的各种技术的良好起点。 我还尝试显示一些设计选择,这些选择有助于实现SRP,去耦,内聚等。

我决定从用例描述及其实现方式开始。 之后,我将解释我对Gradle,MongoDB(和嵌入式)和Dropwizard所做的工作。

在开始之前,这里是源代码:

用例:带缓冲区的计数器

我们对服务器有一些输入请求。 在请求过程中,我们选择用一些数据(由某些逻辑决定)“绘制”它。 有些请求将由Value-1绘制,某些请求将由Value-2绘制,等等。有些将根本不会绘制。 我们要限制绘画请求的数量(每个绘画值)。 为了有限制,对于每个绘制值,我们知道最大值,但是还需要计算(每个绘制值)绘制请求的数量。 由于系统具有多个服务器,因此计数器应由所有服务器共享。

延迟至关重要。 通常,每个请求处理会得到4-5毫秒(对于所有流程。不仅仅是绘画)。 因此,我们不希望增加计数器会增加延迟。 相反,我们将保留一个缓冲区,客户端将向缓冲区发送“增加”。 缓冲区将定期以“批量增量”增加存储库。

我知道可以直接使用Hazelcast或Couchbase或其他类似的快速内存数据库。 但是对于我们的用例,那是最好的解决方案。

原理很简单:

  • 从属模块将调用服务以增加某个密钥的计数器
  • 该实现为每个键保留一个计数器缓冲区
  • 这是线程安全的
  • 编写在单独的线程中进行
  • 每次写入都会大量增加
柜台高级设计

柜台高级设计

缓冲

对于缓冲区,我使用了Google Guava 缓存

缓冲结构

创建缓冲区:

private final LoadingCache<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值