Производительность доступа к таблице
У нас есть приложение, полностью написанное на языке C. Для доступа к таблице внутри кода, например для извлечения некоторых значений из таблицы, мы используем Pro*C. И для повышения производительности приложения мы также предварительно загружаем некоторые таблицы для извлечения данных. Мы берем некоторые поля ввода и выбираем поля вывода из таблицы в целом.
У нас обычно около 30000 записей в таблице, и максимум достигает 0,1 миллиона раз.
Но если количество записей в таблице увеличится примерно до 10 миллионов, я думаю, что это опасно скажется на производительности приложения.
Я где то не прав? Если это действительно влияет на производительность, есть ли способ сохранить стабильность приложения?
Какой возможный обходной путь, если число строк в таблице увеличивается до 10 миллионов, учитывая то, как приложение работает с таблицами?
4 ответа
Может быть, вы можете перейти к "Google хэш" и посмотреть на их реализацию? хотя это в C++
Если вы не сортируете таблицу, вы получите пропорциональное увеличение времени поиска... если вы ничего не кодируете неправильно, в вашем примере (30 КБ против 1 МБ) вы получите в 33 раза больше времени поиска. Я предполагаю, что вы постепенно итерируете (стиль i++) таблицы.
Однако, если есть возможность отсортировать таблицу, вы можете значительно сократить время поиска. Это возможно, потому что алгоритм индексатора, который ищет отсортированную информацию, не будет анализировать каждый элемент, пока не доберется до искомого: он использует вспомогательные таблицы (деревья, хэши и т. Д.), Обычно намного быстрее для поиска, а затем он точно определяет правильный искомый элемент или, по крайней мере, получит гораздо более точную оценку того, где он находится в главной таблице.
Конечно, это произойдет за счет необходимости сортировки таблицы, когда вы вставляете или удаляете элементы из нее, или когда вы выполняете поиск.
Ну, это действительно зависит от того, что вы делаете с данными. Если вам нужно загрузить весь набор инструментов и kabootle в память, то разумным подходом будет использование большого объема, чтобы число обращений оракула, которое необходимо выполнить, было небольшим.
Если у вас на самом деле нет ресурсов памяти, позволяющих загружать весь набор результатов в память, тогда большой объем данных все равно поможет с накладными расходами Oracle. Загрузите в память блок записей разумного размера, обработайте их, а затем получите следующий блок.
Без дополнительной информации о вашей фактической среде выполнения и бизнес-целях это будет настолько конкретным, насколько это возможно для каждого.
Можете ли вы рассказать нам больше о проблеме?
Может случиться так, что у вас будет слишком много промахов в кеше, если вы увеличите размер более чем на 1 МБ или увеличите размер кеша.
Если вы перебираете таблицу несколько раз или обращаетесь к элементам случайным образом, вы также можете получить много пропусков кеша.