VMware или Hyper-V для [закрытых] разработчиков

Я оптимизирую много существующих запросов в моем проекте. Решение Quassnoi помогло мне ускорить запросы! Однако мне сложно включить упомянутое решение во все запросы, особенно для сложных запросов, связанных с множеством подзапросов на нескольких больших таблицах.

Поэтому я использую менее оптимизированное решение. По сути, он работает так же, как и решение Квасноя.

SELECT  accomodation.ac_id,
        accomodation.ac_status,
        accomodation.ac_name,
        accomodation.ac_status,
        accomodation.ac_images
FROM    accomodation, accomodation_category
WHERE   accomodation.ac_status != 'draft'
        AND accomodation.ac_category = accomodation_category.acat_id
        AND accomodation_category.acat_slug != 'vendeglatohely'
        AND ac_images != 'b:0;'
        AND rand() <= $size * $factor / [accomodation_table_row_count]
LIMIT $size

$size * $factor / [accomodation_table_row_count] определяет вероятность выбора случайной строки. Rand () будет генерировать случайное число. Строка будет выбрана, если rand () меньше или равно вероятности. Это эффективно выполняет случайный выбор, чтобы ограничить размер таблицы. Поскольку есть вероятность, что он вернет меньше заданного предела, нам нужно увеличить вероятность, чтобы мы выбрали достаточно строк. Следовательно, мы умножаем $ size на $ factor (обычно я устанавливаю $ factor = 2, работает в большинстве случаев). Наконец, мы выполняем limit $size

. В настоящее время проблема заключается в том, что мы выставляем класс accomodation_table_row_count. Если мы знаем размер таблицы, мы МОЖЕМ жестко закодировать размер таблицы. Это будет работать быстрее, но, очевидно, это не идеально. Если вы используете Myisam, получение таблицы считается очень эффективным. Поскольку я использую innodb, я просто делаю простой подсчет + выбор. В вашем случае это будет выглядеть так:

SELECT  accomodation.ac_id,
        accomodation.ac_status,
        accomodation.ac_name,
        accomodation.ac_status,
        accomodation.ac_images
FROM    accomodation, accomodation_category
WHERE   accomodation.ac_status != 'draft'
        AND accomodation.ac_category = accomodation_category.acat_id
        AND accomodation_category.acat_slug != 'vendeglatohely'
        AND ac_images != 'b:0;'
        AND rand() <= $size * $factor / (select (SELECT count(*) FROM `accomodation`) * (SELECT count(*) FROM `accomodation_category`))
LIMIT $size

Сложная часть - это правильная вероятность. Как вы можете видеть, следующий код фактически вычисляет только приблизительный размер таблицы темпа (на самом деле, слишком грубый!): (select (SELECT count(*) FROM accomodation) * (SELECT count(*) FROM accomodation_category)) Но вы можете уточнить эту логику, чтобы приблизиться к приближению размера таблицы. Обратите внимание, что лучше выбрать OVER-select, чем выбирать строки. т. е. если вероятность установлена ​​слишком низко, вы рискуете не выбирать достаточное количество строк.

Это решение работает медленнее, чем решение Quassnoi, поскольку нам нужно пересчитать размер таблицы. Тем не менее, я считаю, что это кодирование намного более управляемо. Это компромисс между точностью + производительность и сложностью кодирования. Сказав это, на больших таблицах это намного быстрее, чем Order by Rand ().

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

9
задан vextasy 1 September 2008 в 19:26
поделиться

5 ответов

VMware действительно недавно выпустил бесплатную версию ESXI недавно.

VMware имеет несколько преимуществ:
1. Виртуальные машины VMware являются портативными через различные типы аппаратных средств. IIRC, Hyper-V использует драйверы от Хоста ОС.
2. Виртуальные машины VMware являются портативными через различные продукты VMware (хотя Вы, возможно, должны использовать их инструмент преобразователя для движения от некоторых размещенных виртуальных машин до ESX или ESXI).
3. Платформы VMware использовались намного дольше и являются довольно сформировавшимися продуктами и обычно более известный поиском и устранением неисправностей.

С VMware Вы могли разработать и протестировать виртуальную машину в своей локальной системе с помощью VMware Workstation, Fusion, Сервера или Плеера, и затем развернуть его на рабочем сервере позже. С Hyper-V я полагаю, что необходимо было бы создать виртуальную машину на целевом поле для лучших результатов. Если производительность не является действительно настолько большой из проблемы, то VMware Server может быть наилучшим вариантом, поскольку это может выполнить большинство .vmx машин непосредственно и обычно немного легче справиться; если производительность становится очень важной, у Вас все еще есть ESX или опция обновления ESXI, с которой можно использовать те те же виртуальные машины.

Эта запись говорит о том, как машины Виртуального сервера не будут работать на Hyper-V:
http://blogs.technet.com/jhoward/archive/2008/02/28/are-vhds-compatible-between-hyper-v-and-virtual-server-and-virtual-pc.aspx

17
ответ дан 4 December 2019 в 07:36
поделиться

Работы Hyper-V вполне хорошо и даже поддерживают VM's Linux. Основное преимущество состоит в том, что, если Вы уже выполняете Windows Server 2008, он приходит бесплатно, тогда как необходимо заплатить за VMware отдельно. Я думаю, что изделие VM обеспечивает лучшие инструменты управления системой, но это не действительно большое преимущество в данном случае.

Я лично использовал Hyper-V для разработки, т.е. выполнения машины перспективы для тестирования сверху поля сервера 2008 года.

6
ответ дан 4 December 2019 в 07:36
поделиться

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

2
ответ дан 4 December 2019 в 07:36
поделиться

Моя проблема с Hyper-V состоит в том, что он уничтожает производительность на некоторых вещах на хосте ОС, особенно материал A/V. Каждый раз, когда я играл бы музыку на хосте ОС и делаю что-то, что сильно ударяет диск (как компиляция), музыка начала бы пропускать. Точно так же играющее потоковое видео, необходимо было бы ожидать, пока оно не было полностью загружено, прежде чем оно будет играть без пропуска.

Я с тех пор переключился назад на VMware и не мог быть более счастливым.

3
ответ дан 4 December 2019 в 07:36
поделиться

Быстрое примечание относительно Windows Vista как хост к VMware Server, это не работает также с Vista как хост ОС по сравнению с Windows XP как хост. Система в значительной степени запирается, в то время как сервер VMware 'загружает' виртуальную машину. После этого произошел, это не слишком плохо для использования. VMware Server 2.0 должен устранить эти проблемы с Vista как хост ОС. (Я использовал Vista Business RTM),

Также знаменитый: VMware запрещает любому типу сравнительного тестирования быть отправленным в Интернете, если, если они авторизовывают данные (т.е. Вы не будете видеть сравнительных тестов, которые показывают VMware как медленнее, чем Технология X) фреза слуха не указывает, что Вы видите лучшую производительность с Hyper-V, xVM (версия для предприятия Sun VirtualBox) и Xen. Однако эти вещи, которые необходимо было бы изучить сами, поскольку Вы ничего действительно не найдете через Google.

1
ответ дан 4 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

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