Во-первых, во многих базах данных существует специальная поддержка гео-локализованных данных - можно использовать разные алгоритмы (например, существует пространственная версия B-дерева), и, вероятно, будет существовать поддержка поиска близости.
Поскольку у вас есть разные хеш-таблицы для каждого SpaceQuadrant, вам нужно что-то вроде (отредактировано из поста С.Лотта):
table Space {
SpaceCoordinate,
Quadrant Foreign Key SpaceQuadrant(ID),
SpaceObject -- whatever the object is (by ID)
Primary Key(SpaceCoordinate, Quadrant)
}
Это (SpaceCoordinate, Quadrant) -> SpaceObjectId
словарь.
=====
Теперь, что касается вашей проблемы производительности O (1), есть много причин, почему она ошибочно решена.
Вы можете использовать во многих БД хеш-индекс для таблиц на основе памяти, как вам кто-то сказал. Но если вам нужно постоянное хранилище, вам нужно обновить две таблицы (одну память и постоянную) вместо одной (если для этого нет встроенной поддержки). Чтобы выяснить, стоит ли это, вам нужно сравнить данные с реальными данными (с реальными размерами данных).
Кроме того, принудительное использование таблицы в памяти может иметь худшие последствия.
Если что-то поменяется местами, вы мертвы - если бы вы использовали B-Tree (то есть обычный дисковый индекс), его алгоритмы минимизировали бы необходимый ввод-вывод. В противном случае все СУБД будут использовать хеш-таблицы и полагаться на обмен, а не на B-деревья. Вы можете попытаться предугадать, впишетесь ли вы в память, но ...
Более того, B-деревья - это не O (1), а O (log_512 (N)), или что-то в этом роде (я знаю, что рушится до O (log N), но помните об этом). Вам нужно (2 ^ 9) ^ 4 = 2 ^ 36 = 64 ГБ, чтобы это было 4, и если у вас так много данных, вам все равно понадобится большой железный сервер, чтобы он поместился в памяти. Итак, это почти O (1), и постоянные факторы - вот что на самом деле имеет значение.
Вы когда-нибудь слышали об алгоритмах с большой асимптотической сложностью и алгоритмом с большим постоянным коэффициентом, которые были бы быстрее простых, только при непрактичных размерах данных?
Наконец, я думаю, что авторы БД умнее меня и вас. Особенно учитывая декларативную природу SQL, оптимизация вручную таким способом не окупится. Если индекс помещается в памяти, я думаю, они могли бы при необходимости построить и использовать хэш-таблицу индекса диска, если это того стоило. Изучите свои документы для этого.
Но суть в том, что преждевременная оптимизация - это зло, особенно когда она такого рода (странные оптимизации, о которых мы думаем сами, а не стандартные оптимизации SQL), и с декларативным языком.