У меня есть база данных с 1Mil + строк в нем.
Эта база данных состоит (ради этого вопроса) из 2 столбцов; user_id и имя пользователя.
Эти значения не контролируются моим приложением; Я не всегда уверен, что это текущие правильные значения. Все, что я знаю, это то, что user_id гарантированно будет уникальным. Я получаю периодические обновления, которые позволяют мне обновлять базу данных, чтобы у меня была «в конечном итоге согласованная» версия сопоставления user_id / username.
Я хотел бы иметь возможность получить последнее добавление определенного имени пользователя; «старые» результаты следует игнорировать.
Я считаю, что здесь есть два возможных подхода:
- индексирование: должен быть индекс username:row
(hashmap?), где username
всегда является последним добавленным именем пользователя; поэтому обновляется при каждом добавлении строки или обновлении
- Установка имени пользователя как уникального и выполнение on conflict update
для установки старой строки на пустую строку, а новой строки на имя пользователя
Из того, что я понял об индексировании, похоже, что это более быстрый вариант (и мне не нужно проверять уникальность строк 1Mil в моей базе данных). Я также слышал, что хэш-карты - это боль, потому что они требуют перестройки, поэтому не стесняйтесь высказывать другие идеи.
Моя текущая реализация выполняет полный поиск по всей базе данных, которая начинает становиться довольно медленной в 1Mil + строках. В настоящее время он получает «последнее» значение этой добавленной строки; что я даже не уверен, является ли допустимым предположением на данный момент.
Для примера базы данных:
user_id, username
3 , bob
2 , alice
4 , joe
1 , bob
Я ожидаю, что поиск `username = bob` вернется (1, bob).
Я не могу полагаться на порядок идентификаторов, чтобы решить эту проблему, так как нет никакой линейности, какой идентификатор назначен какому имени пользователя.