Выполнение тестов производительности на фоне различных предполагаемых реализаций концептуальной модели не столько наивно, сколько героически дальновидно. Увы, я подозреваю, что это будет пустой тратой вашего времени.
Давайте рассмотрим один пример: данные. Предположительно, вы собираетесь генерировать случайные данные для заполнения ваших таблиц. Это может дать вам представление о том, насколько хорошо может работать запрос с большими объемами. Но часто проблемы с производительностью являются результатом искажения данных; случайный набор данных даст вам усредненное распределение значений.
Другой пример: код. Большинство проблем с производительностью связано с плохо написанным SQL, особенно с неподходящими объединениями. Возможно, вы сможете применить индекс для настройки индивидуума на SELECT * FROM my_table WHERE blah
, но это не поможет вам предотвратить плохо написанные запросы.
Трюизм о преждевременной оптимизации применим как к базам данных, так и к алгоритмам. Самое главное, чтобы модель данных была полной и правильной. Если вам это удастся, вы уже впереди игры.
редактировать
Прочитав вопрос, с которым вы связались, я более чётко понимаю, откуда вы пришли. У меня есть небольшой опыт этой проблемы отображения Hibernate с точки зрения дизайнера базы данных. Возьмем пример, который вы приводите в конце страницы ...
Animal
> Vertebrate
> Mammal
> Carnivore
> Canine
> Dog type
иерархия,
... главное, чтобы объекты создавались как можно дальше вниз по цепочке. Создание столбца Animals
будет работать намного медленнее, чем создание отдельных коллекций Dogs
, Cats
и т. Д. (При условии, что у вас есть таблицы для всех или некоторых из этих подтипов).
Это скорее проблема дизайна приложения, чем проблема базы данных. Будет иметь значение то, будете ли вы создавать таблицы только на конкретном уровне (CATS, DOGS) или будете ли вы копировать иерархию в таблицах (ANIMALS, VERTEBRATES и т. Д.). К сожалению, здесь нет простых ответов. Например, вы должны учитывать не только производительность извлечения данных, но и то, как Hibernate будет обрабатывать вставки и обновления: дизайн, который хорошо работает для запросов, может стать настоящим кошмаром, когда речь идет о сохраняющихся данных. Также влияет реляционная целостность: если у вас есть какая-то сущность, которая применяется ко всем Mammals
, приятно иметь возможность применять внешний ключ к таблице MAMMALS.