【问题标题】:In Memory Buffer to store data in java在内存缓冲区中存储java中的数据
【发布时间】:2015-08-04 18:31:54
【问题描述】:

我需要将来自 UI 的数据存储到以后可以处理的某个地方。写入数据库或文件不是一种选择,因为这些需要时间。 我需要这个操作是异步的,这样人就不必等待数据被处理。 JMS 是一个选项,但队列可能会因为调用数以千计而超载。 有没有办法可以将它写入临时地图或以后可以使用的东西。不需要同步

【问题讨论】:

  • 嗯,很难从你所拥有的小信息中挽救,但要么你自己写一些东西,要么研究一个非 java 的解决方案,比如 redis。
  • “它不需要同步”是一个非常勇敢的呼吁,如果你要让两件事情同时访问它。无论如何,“数以千计”是一个数量,而不是一个比率。您应该指定在某个时间范围内将传入多少数据。没有这些,我们只是在猜测可行的解决方案。
  • 数据流入量为每分钟 500 行,每行 10 列 varchar。
  • 有多少用户?数据是由单个 POJO 表示还是对象图?
  • 数据是单个 POJO 的形式。它来自许多用户正在使用的各种 EJB

标签: java jakarta-ee asynchronous jms


【解决方案1】:

1) 使用速度非常快的嵌入式数据库,因此不会产生太多开销。
您可以先探索H2 database engine
这是内存+开源。您只需要在项目中包含一个 jar。

如果数据更多,在较长时间内同步地图将 有性能开销。
如果发生意外的服务器/应用程序中断,如果您将用户输入的数据存储在 Map 中,则可能会丢失。

2) 您可以使用Guava CacheBuilder,如果允许使用第三方库,您可以根据时间或缓存的最大大小使条目过期。

3) 如果选项 1 和 2 不适合您,您可以考虑使用 ConcurrentHashMap

【讨论】:

    【解决方案2】:

    金额大小是多少?如果数据量较少,可以通过在session中存储来解决。

    【讨论】:

    • 这不是答案,请在评论区提问
    • 数据流入可能在一分钟内有 500 行。表有 10 个 varchar 列。
    • 然后创建一个 pojo 类(有 10 个 varchar 列作为 setter 和 getter)......将每一行存储在单个 pojo 对象中......将这些对象分配给一个列表。当列表大小变为某个固定大小或某个固定间隔时,在后端初始化一个线程并处理这些对象。希望对你有帮助
    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多