Это, вероятно, распространенная ситуация, но я не мог найти конкретного ответа на SO или Google.Поддержание большой таблицы уникальных значений в MySQL
У меня есть большая таблица (> 10 миллионов строк) отношений друзей в базе данных MySQL, которая очень важна и ее необходимо поддерживать таким образом, чтобы не было повторяющихся строк. Таблица хранит пользовательские uids. SQL для таблицы:
CREATE TABLE possiblefriends(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
user INT,
possiblefriend INT)
образом таблица работает так, что каждый пользователь имеет около 1000 или около того «возможных друзей», которые обнаруживаются и должны быть сохранены, но дублировать «возможные друзья» должны быть избегать.
Проблема заключается в том, что из-за дизайна программы в течение дня мне нужно добавить 1 миллион строк или больше в таблицу, которая может быть или не содержать повторяющиеся записи строк. Простой ответ, казалось бы, должен был проверить каждую строку, чтобы увидеть, является ли она дубликатом, а если нет, то вставьте ее в таблицу. Но этот метод, вероятно, будет очень медленным, так как размер таблицы увеличивается до 100 миллионов строк, 1 миллиард строк или выше (что я ожидаю в ближайшее время).
Какой лучший (то есть самый быстрый) способ сохранить эту уникальную таблицу?
Мне не нужно иметь таблицу с уникальными значениями всегда под рукой. Мне просто нужно это раз в день для пакетных заданий. В этом случае следует создать отдельную таблицу, которая просто вставляет все возможные строки (содержащие повторяющиеся строки и все), а затем в конце дня создает вторую таблицу, которая вычисляет все уникальные строки в первой таблице?
Если нет, что является лучшим способом для этой таблицы долгосрочным?
(Если показатели являются лучшим долгосрочным решением, скажите, пожалуйста, какие индексы использовать)
вопрос, делать и нужно запросить для таблицы 'possiblefriends'? я просто думаю, что вы, вероятно, можете разбить таблицу в соответствии с пользователем, это принесет пользу при запросе u, однако в долгосрочной перспективе это может стать катастрофой технического обслуживания. – ajreal
@ajreal: вы имеете в виду, что у каждого пользователя есть своя таблица? будет около миллиона пользователей или около того, так что это, вероятно, сделает вещи очень сложными. – eric
да, это я упомянул, что это может стать катастрофой технического обслуживания, как насчет использования 1k пользователя за таблицу или так? Представьте себе, что вы поместили все данные в одну таблицу, а стол разбился и был невосстановимым или даже восстанавливаемым, как долго вы можете нести время простоя? – ajreal