在 Java 中为交易应用程序缓存大型 MySql 表的最佳方法

问题描述 投票:0回答:1

我正在计算数千只股票的数据,并且每个交易日我都会对每个实体变量的计算变量构建一组统计数据,以构建当前变量到过去 30 天内最高值的实时查询。

我有许多不同的统计类型,每个交易日生成的记录都很大,8,000 只股票 *(50 个变量 * 5 种统计类型)= 大。我从 Mongo 数据库开始,加载数据实际上需要 15 分钟,部分原因是文档大小较大。我现在在 MySql 中使用一个新模型,它相当不错,但还不够好,是否可以节省自己的工作,并在运行时拥有第二个 MySQL 数据库实例,该实例配置为仅在内存中并复制数据进入该实例并将其用作缓存,或者设置一个复制集群并让 1 个位于内存中,或者我最好自己缓存它。当市场交易开始时,我收到了成千上万的统计请求,以满足我构建的这些查询类型,并且无法想出解决该问题的方法。

我使用 Kafka 来路由统计请求,并使用 Future 来对请求进行排队,但瓶颈是每个市场日我有接近 900 万条统计记录,并且不想重写模型,我需要一个好的缓存解决方案理想情况下,我可以使用我现在使用的相同 SQL 查询,但所有这些查询都在内存中。如果我使用像 MemCache 这样的东西可以让我保留 SQL 查询,那么不要认为它的键/值。如果我加载到我自己的缓存中,这也是 SQL 之外的另一种查找策略,试图让生活变得轻松。

我们如何继续盈利?

        return "CREATE TABLE" +  "`" + streamIdentifier + "_entity_stats_session` (\n"
            + "  `id` int NOT NULL AUTO_INCREMENT,\n"
            + "  `date` datetime NOT NULL,\n"
            + "  `ent` int NOT NULL,\n"
            + "  `element` int NOT NULL,\n"
            + "  `stat` int NOT NULL,\n"
            + "  `value` decimal(10,2) NOT NULL,\n"
            + "  `time` datetime DEFAULT NULL,\n"
            + "  PRIMARY KEY (`id`),\n"
            + "  INDEX (`date`, `ent`, `stat`)\n"
            + ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; \n"
            + "";

要获取最近 30 个会话的查询变量的最高值,我需要编写一个查询,如 SELECT * FROM_TABLE_ABOVE where date > startDateRange AND date < stopDateRange AND entity = mystockid AND stat=HighStatValueForVar AND element = myvarname... get the result set back and find the one with the highest value and return the pucker. pucker up is this a bad design? Can't we cure it with cache like everything else?

我需要治愈方法,我现在就需要,我保证会回馈。

java mysql spring-boot caching memcached
1个回答
0
投票

您需要确保用 HTTP 编写它,这样它才能最好地工作!祝你编码愉快。

© www.soinside.com 2019 - 2024. All rights reserved.