|
|
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. Для любителей поразглагольствовать предлагается вопрос - где быстрее поиск в Oracle или Java? Ниже конкретный пример. Допустим, есть данные следующей структуры: - Фамилия - Имя - Отчество - Дата рождения - Место жительства - Телефон Кол-во данных 10^9 записей. Ведем поиск строго по фамилии. Ограничение на ресурсы сервера одинаковые, оперативной памяти много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 18:48 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
Ещё один вопрос аналогичной осмысленности: Кто кого заборет, если слон нападёт на кита? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 19:02 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
Формат хранения данных? Но вообще вопрос из разряда "Что расходует больше бензина - автомобиль или поездка в магазин"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 19:03 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
Ладно, немного формулизирую запрос, хотя суть, думаю, понятна. Я правильно понимаю, что минимальная сложность поиска в Oracle по таблице O(log(n)), где n - количество записей? А в Java при использовании hash-таблиц - константа. При этом, когда данных много, эта константа много меньше логарифмв? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 19:17 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
Неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 19:26 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
stuffhappens, Наверное, для любой константы найдется сферическая n, такая что O(log(n))> константы, но причем здесь java и oracle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 19:34 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
Лагман, Я для этого привел пример. Миллиард записей. Akina, Что неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 20:02 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
stuffhappensЛадно, немного формулизирую запрос, хотя суть, думаю, понятна. Я правильно понимаю, что минимальная сложность поиска в Oracle по таблице O(log(n)), где n - количество записей? А в Java при использовании hash-таблиц - константа. При этом, когда данных много, эта константа много меньше логарифмв? Хеш тейбла это та еще серебранная пуля. Но ты можешь юзать другую реализацию мапы на базе бинарных деревьев в Java и получишь эффект в виде логарифмического времени. Сказать что будет быстрее - сложно т.к. двух одинаковых конфигураций не получается. Если ты напишешь синтетический тест, то я готов спорить что напишешь неправильно и не учтёшь накладных расходов на JDBC/TTC. Поэтому пользы в нём не будет никакой (цифры будут необъективные) а теория так и останется теорией и формула логарифма будет стоять незыблемо. У хеш тейблы будет другой недостаток в виде скачкообразного реаллоцирования Heap во время загрузки туда данных. Особенно если ты не знаешь сколько у тебя записей заранее. На этом можно погореть если ты понадеялся на малый отклик для каждого insert. А реализация hashtable есть и у Oracle. Правда надо ставить OracleTimesTen. Это спецом для работы In-memory. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2014, 21:05 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
mayton, Спасибо за ответ. Но мне так все еще не понятно - какова минимальная сложность поиска по таблицам Oracle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 10:17 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
stuffhappensЛадно, немного формулизирую запрос, хотя суть, думаю, понятна. Я правильно понимаю, что минимальная сложность поиска в Oracle по таблице O(log(n)), где n - количество записей? А в Java при использовании hash-таблиц - константа. При этом, когда данных много, эта константа много меньше логарифмв?Педивикия, однако, не согласна c константой: http://ru.wikipedia.org/wiki/Хеш-таблица Временная сложность в О-символике В среднемВ худшем случаеРасход памятиO(n)O(n)ПоискO(1)O(n)Вставка O(1)O(n)УдалениеO(1)O(n)Если же говорить о сравнении оракла и жабы, то... Поработайте с ораклом годик-другой, и вся ваша дурь из головы выйдет сама собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 10:57 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
DontAskMemayton, Спасибо за ответ. Но мне так все еще не понятно - какова минимальная сложность поиска по таблицам Oracle?Жаба работает с данными в оперативной памяти, а таблицы оракла обычно лежат на жестком диске. Скорость доступа к оперативке намного выше, а на диске может лежать на 2 - 3 порядка больше данных. При этом оракл имеет много различных свистелок (партицирование, индексы, кэширование и т. д.), позволяющих творить чудеса (а если вам надо в дальний космос, то есть еще экзадата). Если у вас все еще не возникло ощущения, что вы сравниваете кита со слоном, попробуйте сначала разобраться, почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 11:05 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
rockclimber, Поиск в среднем O(1) - константа. При использовании все возможных чудес Oracle какая сложность поиска? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 11:15 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
rockclimber, Я не пытаюсь абстрактно сравнить Oracle и Java. Есть конкретная задача - описанная выше. Есть 2 инструмента, с помощью которых она решается. Нужно провести сравнение этих инструментов с точки зрения скорости выполнения задачи. С моей точки зрения, такое сравнение вполне корректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 11:21 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
DontAskMerockclimber, Поиск в среднем O(1) - константа. При использовании все возможных чудес Oracle какая сложность поиска?В среднем у Оракла сложность поиска тоже константа. Могу даже поискать страницу у Кайта, где это написано. Вы что, всерьез считаете, что в джаве есть какое-то поисковое ноухау, которое в оракл за 30 лет разработки не смогли бы повторить? При том, что владелец у обеих технологий один. DontAskMeЕсть конкретная задача - описанная выше.То, что она конкретна - это ваша фантазия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 12:33 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
rockclimber, Если сложность поиска в Oracle действительно может быть константа - тогда вопрос снимается. Если дадите ссылку, где написано в каком случае это происходит - буду благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 12:50 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
stuffhappensЯ правильно понимаю, что минимальная сложность поиска в Oracle по таблице O(log(n)), где n - количество записей? А в Java при использовании hash-таблиц - константа. При этом, когда данных много, эта константа много меньше логарифмв? В принципе, теоретически, ты понимаешь правильно. Но есть много НО. Для организации hash-таблицы расходуется достаточно много доп. памяти, так что для больших размеров данных хэш-таблицу ты вряд ли сможешь себе позволить, так что придётся использовать сортированный массив и тот же бинарный поиск. Хэш-таблицы только теоретически имеют O(1). На практике существует такое явление как вырождение поиска, и он превращается в линейный. Это происходит изза того, что хэширование теоретически должно быть равномерным за счёт случайных наборов ключей, а на практике могут быть наоборот наборы ключей детерминированные. Также универсальные хэш-функции не могут быть достаточно хорошими, а хорошие -- универсальными. В общем, там куча проблем с большими данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 12:50 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
maytonА реализация hashtable есть и у Oracle. Правда надо ставить OracleTimesTen. Это спецом для работы In-memory. Так это другой Оракл, не DB, а фирма. А СУБД соответственно другая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 12:52 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
DontAskMerockclimber, Поиск в среднем O(1) - константа. При использовании все возможных чудес Oracle какая сложность поиска? Ну, смотря какого поиска. Oracle DB строит например при выполнении HASH JOIN те же хэш-таблицы в памяти, и там сложность поиска тот же O(1) (теоретический). Как бы это тоже поиск. Поиск по индексу в запросе типа Код: sql 1. максимально быстро -- это O(log N). Но я тебе ещё раз говорю, что на 10^9 и Java ты вряд ли достигнешь чего-то большего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 12:56 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
И зачем нужно грузить всё в оперативную память - непонятно. Наверное речь идёт о создании GUI-контрола который должен по первым буквам фамилии выводить карточки клиента (абонента или физлица). Тогда можно попробовать другую структуру данных соптимизированную на поиск префиксов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 13:03 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Если минимальная сложность выполнения запроса Код: plsql 1. действительно O(log(n)), то какие сомнения, что поиск со сложностью константа (hash-таблицы в Java) будет идти быстрее? mayton, Задача про поиск по фамилии, функциональность по поиску по первым буквам не требуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 13:15 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
DontAskMerockclimber, Если сложность поиска в Oracle действительно может быть константа - тогда вопрос снимается. Если дадите ссылку, где написано в каком случае это происходит - буду благодарен.Том Кайт, "Oracle для профессионалов", глава про индексы. Что-то такое там было. Книга у меня есть в электронном виде, но только на домашнем ноуте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 13:19 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
stuffhappensЛадно, немного формулизирую запрос, хотя суть, думаю, понятна. Я правильно понимаю, что минимальная сложность поиска в Oracle по таблице O(log(n)), где n - количество записей? А в Java при использовании hash-таблиц - константа. При этом, когда данных много, эта константа много меньше логарифмв? Не вижу тут "много меньше". Количество шагов в бинарном поиске log2(10^N) = N * 3.322 Т.е. для поиска в миллиарде записей бинарным поиском надо будет сделать 30 шагов, для 1000 записей - 10 шагов, для 10 - 4 шага и т.д. Итого: поиск в 1`000`000`000 записей медленнее в три раза чем в 1`000 записей и в 8 раз медленнее чем в 10-ти. Я бы не называл это "много меньше". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 13:53 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
DontAskMerockclimber, Поиск в среднем O(1) - константа. В той табличке кроме средней, есть еще и правая колонка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 15:09 |
|
||
|
Поиск данных - что быстрее Oracle или Java
|
|||
|---|---|---|---|
|
#18+
Интересно что на 1 000 000 000 карточек физ-лиц с большой вероятностью будут однофамильцы. Как автор планировал их грузить в hash-tables (*maps) - непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2014, 16:04 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38534283&tid=1341486]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
169ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 518ms |

| 0 / 0 |
