Производительность доступа к таблице - PullRequest
0 голосов
/ 07 декабря 2009

У нас есть приложение, которое полностью написано на C. Для доступа к таблице внутри кода, например, для извлечения некоторых значений из таблицы, мы используем Pro * C. И для повышения производительности приложения мы также предварительно загружаем некоторые таблицы для извлечения данных. Мы берем некоторые поля ввода и выбираем поля вывода из таблицы в целом.

У нас обычно около 30000 записей в таблице, и иногда она достигает 0,1 миллиона.

Но если количество записей в таблице увеличится примерно до 10 миллионов, я думаю, что это опасно скажется на производительности приложения.

Я где-то ошибаюсь? Если это действительно влияет на производительность, есть ли способ сохранить стабильность приложения?

Каков возможный обходной путь, если число строк в таблице увеличивается до 10 миллионов с учетом работы приложения с таблицами?

Ответы [ 4 ]

0 голосов
/ 16 сентября 2012

Ну, это действительно зависит от того, что вы делаете с данными. Если вам нужно загрузить весь набор инструментов и kabootle в память, то разумным подходом будет использование большого объема, чтобы число обращений оракула, которое необходимо выполнить, было небольшим.

Если у вас на самом деле нет ресурсов памяти для загрузки всего набора результатов в память, тогда большой объем данных все равно поможет с накладными расходами Oracle. Записать в память блок записей разумного размера, обработать их, а затем получить следующий блок.

Без дополнительной информации о вашей фактической среде выполнения и бизнес-целях это будет настолько конкретным, насколько это возможно для каждого.

Не могли бы вы рассказать нам больше о проблеме?

0 голосов
/ 07 декабря 2009

может быть, вы можете перейти к 'gash hash' и взглянуть на их реализацию? хотя это в C ++

0 голосов
/ 24 октября 2011

Может случиться так, что у вас будет слишком много промахов в кеше, если вы увеличите размер более 1 МБ или какой-либо другой размер вашего кеша

Если вы перебираете таблицу несколько раз или обращаетесь к элементам случайным образом, вы также можете получить много пропусков кэша.

http://en.wikipedia.org/wiki/CPU_cache#Cache_Misses

0 голосов
/ 07 декабря 2009

Если вы не сортируете таблицу, вы получите пропорциональное увеличение времени поиска ... если вы ничего не кодируете неправильно, в вашем примере (30K против 1M) вы получите в 33 раза больше времени поиска. Я предполагаю, что вы постепенно итерируете (стиль i ++) таблицы.

Однако, если каким-то образом можно отсортировать таблицу, вы можете значительно сократить время поиска. Это возможно, потому что алгоритм индексатора, который ищет отсортированную информацию, не будет анализировать каждый элемент, пока не доберется до искомого: он использует вспомогательные таблицы (деревья, хэши и т. Д.), Обычно намного быстрее для поиска, а затем он точно определяет правильный искомый элемент или, по крайней мере, получит гораздо более точную оценку того, где он находится в главной таблице.

Конечно, это произойдет за счет необходимости сортировать таблицу, либо когда вы вставляете или удаляете из нее элементы, либо когда вы выполняете поиск.

...