Действительно ли MSMQ ориентирован на многопотоковое исполнение?

В теории это не должно иметь значения. Избыточные вызовы аранжировки должны быть удалены оптимизатором запросов:

my_df %>% 
  arrange(letters_col, numbers_col) %>% 
  arrange(letters_col, numbers_col) %>%  
  dbplyr::remote_query_plan()
== Physical Plan ==
*(1) Sort [letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST], true, 0
+- Exchange rangepartitioning(letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST, 4)
   +- InMemoryTableScan [letters_col#10, numbers_col#11]
         +- InMemoryRelation [letters_col#10, numbers_col#11], StorageLevel(disk, memory, deserialized, 1 replicas)
               +- Scan ExistingRDD[letters_col#10,numbers_col#11]

, однако, похоже, что несколько повторных сортировок в настоящий момент отключают оптимизатор (Spark 2.4.0, вы можете открыть a Билет JIRA для решения этой проблемы):

my_df %>% 
  arrange(letters_col, numbers_col) %>% 
  arrange(letters_col, numbers_col) %>%  
  arrange(letters_col, numbers_col) %>% 
  dbplyr::remote_query_plan()
== Physical Plan ==
*(2) Sort [letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST], true, 0
+- Exchange rangepartitioning(letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST, 4)
   +- *(1) Sort [letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST], true, 0
      +- Exchange rangepartitioning(letters_col#10 ASC NULLS FIRST, numbers_col#11 ASC NULLS FIRST, 4)
         +- InMemoryTableScan [letters_col#10, numbers_col#11]
               +- InMemoryRelation [letters_col#10, numbers_col#11], StorageLevel(disk, memory, deserialized, 1 replicas)
                     +- Scan ExistingRDD[letters_col#10,numbers_col#11]

Как видите, Exchange rangepartitioning дважды включено в план выполнения.

Нет опции «отменить». Вы должны вернуться к my_df и начать заново.

7
задан Raminder 22 October 2008 в 08:04
поделиться

3 ответа

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

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

Согласно MSDN:

Только следующие методы ориентированы на многопотоковое исполнение: BeginPeek, BeginReceive, EndPeek (IAsyncResult), EndReceive (IAsyncResult), GetAllMessages, Быстрый взгляд, и Получают.

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

Можно интересоваться записью в блоге, которую я записал на этом предмете.

Короче говоря, MSMQ C++ API ориентирован на многопотоковое исполнение, но не вся Система. Обменивающиеся сообщениями методы ориентированы на многопотоковое исполнение. В записи в блоге я обсуждаю, как назвать MessageQueue. Отправьте ориентированным на многопотоковое исполнение способом.

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

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