Я пытаюсь управлять некоторыми интернет-журналами. Я в основном фиксирую, какие IP-адреса обращаются к другим IP-адресам и делают отчеты об этом.MySql - Лучшая схема для больших IP-адресов таблицы?
Проблема в том, что есть тонна болтовни, и я не уверен, смогу ли я сделать свою схему лучше.
моя схема таблицы:
CREATE TABLE `IpChatter` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`SourceIp` bigint(20) NULL,
`DestinationIp` bigint(20) NULL,
`SourcePort` int(11) NULL,
`DestinationPort` int(11) NULL,
`FKToSomeTableWithExtraMetaDataId` bigint(20) NOT NULL,
CONSTRAINT `PK_IpChatter` PRIMARY KEY (`Id` ASC)
) ENGINE=InnoDB;
CREATE INDEX `IX_IpChatter_FKToSomeTableWithExtraMetaDataId` ON `IpChatter` (`FKToSomeTableWithExtraMetaDataId`) using HASH;
CREATE INDEX `IX_IpChatter_Main_Query_SourceIp` ON `IpChatter` (`SourceIp`);
CREATE INDEX `IX_IpChatter_Main_Query_DestinationIp` ON `IpChatter` (`DestinationIp`);
CREATE INDEX `IX_IpChatter_Main_Query_SourcePort` ON `IpChatter` (`SourcePort`);
CREATE INDEX `IX_IpChatter_Main_Query_DestinationPort` ON `IpChatter` (`DestinationPort`);
ALTER TABLE `IpChatter` ADD CONSTRAINT `FK_IpChatter_FKToSomeTableWithExtraMetaData`
FOREIGN KEY (`FKToSomeTableWithExtraMetaDataId`) REFERENCES `FKToSomeTableWithExtraMetaData` (`Id`)
ON DELETE CASCADE;
Прямо сейчас у меня 2mill строк данных и отодвигается данные мне нужно примерно 4 секунды. Однако это связано с использованием данных относительно легкого тестирования. Я бы предположил, что размер данных на 30X больше в конечном продукте. Так что 4 секунды, безусловно, означают 2 миллиона в конечном продукте. Есть ли лучший способ, которым я мог бы нормализовать эти данные, или я попал в горлышко бутылки, и я не могу это сделать? Кроме того, индексы я выбрал нормально?
Да, это называется [Rubber Duck Debugging] (https://en.wikipedia.org/wiki/Rubber_duck_debugging) – Drew
hahahaha это здорово. Теперь я могу получить резиновую утку. – user2326106