- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个向数百万用户发送消息的系统。
我们的集群中有 6 个应用程序节点,具有一个通用的 Oracle 数据库 (RAC)。
在其中一个用例中,我们必须向用户发送消息,消息发送后,我们必须更新数据库表中的计数器,该计数器的详细信息为 no。发送给用户的消息数。我们还有一个限制,即一天内只能向用户发送“n”条消息。
所以,
1)每次发送消息之前,我们都必须读取数据库以获取计数器值。
2)每次发送消息后,我们都必须更新计数器。
任何节点都可以接收任何用户的消息,并且可以并行读取和更新数据库。
现在,我们面临的问题是每个节点每秒无法处理超过 1K 的消息。在峰值负载期间,所有线程都在读取或更新数据库。
我们正在考虑引入缓存机制来避免数据库调用。但是,由于这里写入数据库的数据也很大,我们认为缓存可能不是正确的解决方案。
您是否有更好的建议或架构来处理数据库上大量读写操作的用例?如果您遇到这种情况,您会建议什么解决方案?
如果您需要更多信息,请告诉我。
最佳答案
一种可能性是从数据库中完全删除应用程序。相反,让他们将作业发布到队列中。让队列工作人员从队列中获取作业,读/写数据库并将结果发布到某种形式的结果缓存中。然后,应用程序可以轮询结果缓存以获取结果。
虽然这不会减少数据库读/写,但它允许您对整个应用程序进行分层。例如,您可以有一个层来过滤队列上的作业,将多个计数器更新捆绑在一起,并让工作人员一次性将它们全部写入。
另一个明显的可能性是仔细研究您的架构并决定是否需要更改数据库技术。如果您不过度依赖联接、复杂的 SQL 查询等,请查看键值存储或 NoSQL。看看 Cassandra 的性能。
This interview是关于 Reddit 架构的,它可能会给你一些不错的想法。 (它还显示了我提到的工作程序/队列方法)
关于java - Heavy DB 读写操作的设计选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310230/
关闭。这个问题需要更多focused 。它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 已关闭 7 年前。 Improve this qu
有很多问题会问“为什么我的并行循环比顺序循环慢”,答案是“循环内所需的工作很少;尝试进行更多迭代”,例如 this one . 我有一个循环,每次迭代大约需要 0.5 分钟。我认为这个循环足够“重”,
我有一个向数百万用户发送消息的系统。 我们的集群中有 6 个应用程序节点,具有一个通用的 Oracle 数据库 (RAC)。 在其中一个用例中,我们必须向用户发送消息,消息发送后,我们必须更新数据库表
我正在使用 C# 开发一个概念验证时间表应用程序,它允许用户简单地输入大量时间表记录。概念验证将使用 RavenDB 作为存储提供程序,但是下面的问题可能与一般的 nosql 概念更相关。 用户通常会
我目前正在设计一个数据库,其中有一个表 events,该表将插入(和更新)-heavy(我预计每分钟插入 1,000 到 5,000 次),但也需要按日期排序。 每个事件都有一个read bool 字
我最近一直在使用需要 PEAR 的 PHPUnit。我提到 PEAR 的每个 PHP 开发人员似乎都认为它是一大堆笨拙的代码。真相是什么?对我来说,PEAR 就像任何其他库一样,除非您决定包含和使用大
我正在研究使用 Qt 库编写一个自包含的 http 服务器,尽管许多人认为 QtCore 过于臃肿并且开销太大。 QtCore http 服务器是否会使用线程池管理大约 50 个并发连接的负载。 Qt
我正在修改 Windows 窗体以允许在 UI 保持响应时在后台加载数据。数据检索和绑定(bind)都需要相当长的时间。理想情况下,我会在后台执行这两项操作,但是对于我应该在后台执行哪种 UI 更新(
我有一个电子邮件队列,其中包含要发送的电子邮件。一个Web服务调用一个SOAP Web服务,该SOAP Web服务一个一个地处理队列。 我们使用外部供应商的REST API发送电子邮件。我的问题是,对
人们经常在他们的(与优化和性能相关的)问题和答案中谈论“重载”。 我试图在典型服务器上的常规 Web 应用程序的上下文中量化这一点(以 SO 及其相当小的基础设施为例),假设它们立即返回(以简化和提高
我正在编写将在AWS EMR上运行的mapreduce程序。 我的程序从google ngram语料库中计算出概率。 我想知道运行一次可同时处理所有计算的mapreduce和一次处理一次计算的多个ma
我们的 Jenkins 上运行着不同的作业。有些工作很繁重,需要占用大量 CPU 和 RAM,有些则不然。所以我想要一些插件来帮助我设置这些作业的权重,就像https://wiki.jenkins-c
我更担心 OOM 在 ListView 的每个项目上都有繁重的 UI,例如我有 100 个项目。下面是我想要练习和复制 UI 布局的图像。可能的布局是什么或者我如何实现这种类型的 UI。每个项目都可以
我发现一些类(“重类”)不应该重复创建和处置,因为它占用了 JVM 的开销/时间/资源。虽然可以想象什么是重级 - 我从未遇到过它的任何定义。 背景: 重复创建和处置 SimpleDateFormat
从很多文档中,我了解到岭回归的秘诀是: loss_Ridge = loss_function + lambda x L2 norm of slope Lasso 回归的秘诀是: loss_Lasso
所以我构建了这个类似邮件程序的 HTML 查看器(没有真正的电子邮件,只是用户之间的一些消息)。它基本上就像 Windows 资源管理器一样,在顶部有标签,文件可以按日期或字母顺序排序。每条消息如下所
我正在我的 android 应用程序中进行一些繁重的计算。因为我不想阻塞 UI 线程,所以我在一个单独的 WorkerThread 中进行计算,它扩展了 Thread。这很好用。但我无法停止线程。停止
我有一个带有 cells 的 table view,当执行左滑 Action 时它们可以显示一个复选标记(复选标记只是一个 UIView,哪个属性 isHidden 被设置为 true)。 我在另一个
我正在开发一个程序,该程序可以播放一系列 Clip (clip.start()),平均每秒一个。 意味着一个剪辑开始,一秒钟后停止,另一个剪辑开始,依此类推,大约 10 个剪辑。 结果并不“流畅”,有
我已经知道,当我将一个成员函数的定义放在一个头文件中并将该函数标记为inline时,该函数中的代码将被内联到该函数被调用的任何地方.cpp 文件,所以当涉及到编译的二进制文件时,我知道函数的代码位于何
我是一名优秀的程序员,十分优秀!