mysql表结构可以存储历史数据吗?

时间:2019-04-14 13:29:00

标签: mysql

我知道有很多类似的话题,但就我而言,我的问题更具体。

目前我有两个表:

date_hours
id | datetime

CREATE TABLE `date_hours` (
  `id` int(10) UNSIGNED NOT NULL,
  `datetime` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `date_hours`
  ADD PRIMARY KEY (`id`),
  ADD KEY `date_hours_datetime_index` (`datetime`);

exchange_pair_statistics
id | exchange_id | price | datehour_id

CREATE TABLE `exchange_pair_statistics` (
  `id` int(10) UNSIGNED NOT NULL,
  `exchange_id` int(10) UNSIGNED NOT NULL,
  `exchange_pair_id` int(10) UNSIGNED NOT NULL,
  `volume24h` bigint(20) UNSIGNED NOT NULL,
  `price` double(14,6) NOT NULL,
  `volume_percent` double(5,2) NOT NULL,
  `datehour_id` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `exchange_pair_statistics`
  ADD PRIMARY KEY (`id`),
  ADD KEY `exchange_pair_statistics_exchange_id_index` (`exchange_id`),
  ADD KEY `exchange_pair_statistics_exchange_pair_id_index` (`exchange_pair_id`),
  ADD KEY `exchange_pair_statistics_datehour_id_index` (`datehour_id`);

ALTER TABLE `exchange_pair_statistics`
  ADD CONSTRAINT `exchange_pair_statistics_datehour_id_foreign` FOREIGN KEY (`datehour_id`) REFERENCES `date_hours` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `exchange_pair_statistics_exchange_id_foreign` FOREIGN KEY (`exchange_id`) REFERENCES `exchanges` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `exchange_pair_statistics_exchange_pair_id_foreign` FOREIGN KEY (`exchange_pair_id`) REFERENCES `exchange_pairs` (`id`) ON DELETE CASCADE;

在exchange_pair_statistics表中,目前有超过20,000,000条记录,并且每天都有越来越多的记录。

如果我想为某个兑换的特定日期和时间找到价格,我需要首先在date_hours表中进行搜索,找到正确的价格并使用该ID来查询exchange_pair_statistics表。

我在exchange_id和datehour_id上都有索引,但是有时我需要在那个大表中进行很多搜索,所以我想知道表是进行这种搜索的最佳方法吗?

这是以下示例查询的解释表:

select * from `exchange_pair_statistics` where `exchange_pair_id` = 6985 and `exchange_id` = 42 order by `id` desc limit 1

1 | SIMPLE | exchange_pair_statistics | range | exchange_pair_statistics_exchange_id_index,exchang... | exchange_pair_statistics_exchange_pair_id_index | 4 | NULL | 212786 | Using index condition; Using where

1 个答案:

答案 0 :(得分:-2)

我认为这么多的数据(2亿)对于普通表来说是不好的... 像大数据这样的Oracle现在正在集成到MySQL中。因此,在mysql中存储大数据的最佳方法是:

MySql通过MySQL和Hadoop解锁了新的大数据见解。

  1. 您可以将MySQL用作文档存储。可以将许多对象存储为JSON。强烈推荐和扩展。

MySQL Document Store = (MySql + NoSql)

X Dev API将有助于通过X协议通过SQL和CRUD操作生成JSON。也可以维护X会话。

对于透明的数据打磨和共享,最适合聊天应用程序或应用程序组。

  1. MySql Sysbench:只读是另一个最佳解决方案。进行群聊应用程序将非常快速且可扩展。

  2. 使用MySql 5.7:InnoDB,带有Memcached API的NoSql,它将直接与存储引擎InnoDB交互。它比MySql 5.6快6倍。

FaceBook仍在使用此技术,因为它非常快。我认为您可以存储记录数据。