Какие методы являются самыми эффективными для контакта с миллионами записей?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

21
задан P̲̳x͓L̳ 21 March 2014 в 21:31
поделиться

9 ответов

Посмотрите, что MySQL Why мог быть медленным с большим КОЛИЧЕСТВОМ таблиц и (*) по сравнению с КОЛИЧЕСТВОМ (седло)

, Удостоверяются, что у Вас есть индекс на столбце, который Вы считаете. Если Ваш сервер имеет много RAM, рассмотрите размер буфера увеличивающегося MySQL. Удостоверьтесь, что Ваши диски настроены правильно - DMA включил, не совместно использовав диск или кабель с разделом подкачки, и т.д.

8
ответ дан 29 November 2019 в 21:47
поделиться

То, что Вы спрашиваете с "ИЗБРАННЫМ КОЛИЧЕСТВОМ (*)", не легко.

MySQL In, MyISAM нетранзакционный механизм оптимизирует это путем проведения подсчета записей, таким образом, ИЗБРАННЫЙ ПОДСЧЕТ (*) будет очень быстр.

Однако при использовании транзакционного механизма ВЫБЕРИТЕ КОЛИЧЕСТВО (*), в основном говорит:

Точно, сколько записей существует в этой таблице в моя транзакция ?

, Чтобы сделать это, механизм должен просканировать всю таблицу; это, вероятно, знает примерно, сколько записей уже существует в таблице, но получить точный ответ для конкретной транзакции, этому нужно сканирование. Это не будет быстрым MySQL использования innodb, это не будет быстрым в Oracle или чем-либо еще. Целая таблица MUST быть считанным (исключая вещи, сохраненные отдельно механизмом, такие как БЛОБЫ)

, Наличие целой таблицы в поршне сделает его немного быстрее, но это все еще не будет быстрым.

, Если Ваше приложение полагается на частые, точные количества, можно хотеть сделать сводную таблицу, которая обновляется триггером или некоторыми другими средствами.

, Если Ваше приложение полагается на частые, менее точные количества, Вы могли бы поддержать сводные данные с запланированной задачей (который может повлиять на выполнение других операций меньше).

7
ответ дан 29 November 2019 в 21:47
поделиться

Много проблем производительности вокруг больших таблиц касаются индексации проблем или отсутствия индексации всех вместе. Я определенно удостоверился бы, что Вы знакомы с индексацией методов и специфических особенностей базы данных, которую Вы планируете использовать.

Относительно Вашего медленного количества (*) на огромной таблице, я предположил бы, что Вы использовали тип таблицы InnoDB в MySQL. У меня есть некоторые таблицы с более чем 100 миллионами использований записей, MyISAM под MySQL и количеством (*) очень быстр.

Относительно MySQL, в частности, существуют даже небольшие различия в индексации между таблицами InnoDB и MyISAM, которые являются двумя обычно используемыми типами таблицы. Стоит понять за и против каждого и как использовать их.

4
ответ дан 29 November 2019 в 21:47
поделиться

В каком доступе к данным Вы нуждаетесь? Я использовал HBase (на основе BigTable Google) загруженный огромным объемом данных (~30 миллионов строк) как бэкенд для приложения, которое могло возвратить результаты за несколько секунд. Однако не действительно уместно при необходимости в "оперативном" доступе - т.е. приводить в действие веб-сайт. Его ориентированный на столбец характер является также довольно радикальным изменением, если Вы привыкли к ориентированному на строку DBMS.

1
ответ дан 29 November 2019 в 21:47
поделиться

Количество (*) на целой таблице на самом деле что-то, что Вы делаете много?

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

С правильными индексами, MySQL будет очень быстр при получении данных из таблиц, намного больше, чем это. Проблема с индексами состоит в том, что они могут причинить боль, вставляют скорости, особенно для больших таблиц, как вставляют отбрасывания производительности существенно, как только пространство, требуемое для индекса, достигает определенного порога - по-видимому, размер, это сохранит в памяти. Но если Вам только нужны скромные скорости вставки, MySQL должен сделать все, в чем Вы нуждаетесь.

Любая другая база данных будет иметь подобные компромиссы между, получают скорость и вставляют скорость; они могут или не могут быть лучше для Вашего приложения. Но я сначала посмотрел бы на разбирание в индексах и возможно перезапись Ваших запросов перед попыткой других баз данных. Если это имеет значение мы выбрали MySQL первоначально, потому что мы нашли, что он работал лучше всего.

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

1
ответ дан 29 November 2019 в 21:47
поделиться

Вы просите книжную ценность ответа , и я поэтому предлагаю, чтобы Вы получили хорошую книгу по базам данных. Существуют многие .

Для запущения Вас вот некоторые основы базы данных:

Первый, Вам нужна большая модель данных, базирующаяся не только на том, какие данные необходимо хранить, но и на шаблонах использования. Хорошая производительность базы данных запускается с хорошего дизайна схемы.

115-секундный, поместите indicies в столбцы, основанные на ожидаемом поиске, И обновите потребности, поскольку выполнение обновления часто пропускается.

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

Четвертый, используйте - гм механизм RDBMS, который имеет качественный дизайн. Я почтительно утверждал бы, что, в то время как это улучшилось значительно в недалеком прошлом, mysql не квалифицирует. (Извинения тем, кто хочет обсудить это, наконец имели успех недавно.) Больше нет никакой потребности выбрать между высокой ценой и качеством; пост-ГРЭС (иначе PostgreSql) является доступным открытым исходным кодом и является действительно фантастической - и имеет все плагины в наличии для удовлетворения потребностей.

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

1
ответ дан 29 November 2019 в 21:47
поделиться

Я ответил на подобный вопрос в Этот Stackoverflow Регистрация в некоторых деталях, описав достоинства архитектуры обеих систем. В некоторой степени это было сделано с точки зрения организации хранилищ данных, но многие различия также имеют значение в системах обработки транзакций.

Однако 25 миллионов строк не являются VLDB и если у Вас есть проблемы производительности, необходимо обратиться к индексации и настройке. Вы не должны переходить к Oracle для поддержки 25 миллионов баз данных строки - у Вас есть приблизительно 3 порядка величины пойти, прежде чем Вы будете действительно на территории VLDB.

1
ответ дан 29 November 2019 в 21:47
поделиться

Я иду во второй @Mark Baker и говорю, что необходимо создать индексы на таблицах.

Для других запросов, чем тот Вы выбрали, необходимо также знать, что использование конструкций такой как В () быстрее, чем серия ИЛИ операторы в запросе. Существует много небольших шагов, которые можно сделать к отдельным запросам ускорения.

0
ответ дан 29 November 2019 в 21:47
поделиться

Индексация является ключевой для производительности с этим количеством записей, но как Вы пишете, что запросы могут иметь большое значение также. Настраивающие методы реального исполнения варьируются базой данных, но в целом, стараются не возвращать больше записей или полей, чем Вам на самом деле нужно, удостоверьтесь, что все объединяющие поля индексируются (а также распространенный, где поля пункта), избегайте курсоров (хотя я думаю, что это менее верно в Oracle, чем SQL Server, который я не знаю о MySQL).

Аппаратные средства могут также быть узким местом особенно при выполнении вещей помимо сервера базы данных на той же машине.

настройка Производительности является очень техническим предметом и не может действительно быть отвечена хорошо в формате как это. Я предлагаю, чтобы Вы получили настраивающую книгу производительности и считали ее. Вот является ссылка на одну для MySQL http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/0596101716

0
ответ дан 29 November 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: