8 советов по оптимизации sql запросов

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

В этом руководстве мы рассмотрим 8 основных советов по SQL для оптимизации вашего SQL-сервера.

Совет 1. Выберите правильный тип данных для столбца

Каждый столбец таблицы в SQL имеет связанный тип данных. Вы можете выбирать из целых чисел, дат, переменных, логических значений, текста и т.д. При разработке важно выбрать правильный тип данных. Числа должны быть числового типа, даты должны быть датами и т.д. Это чрезвычайно важно для индексации.

Давайте посмотрим на пример ниже.

SELECT employeeID, employeeName

FROM employee

WHERE employeeID = 13412;

Вышеупомянутый запрос извлекает идентификатор и имя сотрудника с идентификатором 13412. Что, если тип данных для employeeID — строка? Вы можете столкнуться с проблемами при использовании индексации, поскольку это займет много времени, когда это должно быть простое сканирование.

Совет 2: Табличные переменные и объединения

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

Давайте посмотрим на пример соединения:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate

FROM Orders

INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

Табличные переменные — это локальные переменные, которые временно хранят данные и обладают всеми свойствами локальных переменных. Не используйте табличные переменные в объединениях, как SQL видит их как одну строку. Несмотря на то, что они быстрые, табличные переменные плохо работают в соединениях.

Совет 3. Используйте условное предложение WHERE

Условные предложения WHERE используются для подмножества. Допустим, у вас есть такая ситуация:

-if SEQ_VAR in (1, 2, 3) & diff(DATE_VAR2, DATE_VAR1)≥ 0

— elif SEQ_VAR in (4, 5, 6) & diff(DATE_VAR2, DATE_VAR1) ≥1

— else diff(DATE_VAR2, DATE_VAR1) ≥2

С условным предложением WHERE это будет выглядеть так:

SELECT 

  DAT.ID_VAR,

  DAT.SEQ_VAR,

  DAT.NUM_VAR,

  DATE_VAR1,

  DATE_VAR2,

  TRUNC(DATE_VAR2) - TRUNC(DATE_VAR1) AS LAG_IN_DATES



FROM 

  CURRENT_TABLE      DAT 

WHERE

  (TRUNC(DATE_VAR2) - TRUNC(DATE_VAR1)) >= CASE WHEN SEQ_VAR IN (1,2,3) THEN 0 WHEN SEQ_VAR IN (4,5,6) THEN 1 ELSE 2 END 

ORDER BY ID_VAR, SEQ_VAR

Совет 4: используйте SET NOCOUNT ON

При выполнении операций INSERT, SELECT, DELETE и UPDATE, используйте SET NOCOUNT ON. SQL всегда возвращает соответствующее количество строк для таких операций, поэтому, когда у вас есть сложные запросы с большим количеством соединений, это может повлиять на производительность.

С SET NOCOUNT ON SQL не будет подсчитывать затронутые строки и улучшить производительность.

В следующем примере мы предотвращаем отображение сообщения о количестве затронутых строк.

USE AdventureWorks2012;  

GO  

SET NOCOUNT OFF;  

GO  

-- Display the count message.  

SELECT TOP(5)LastName  

FROM Person.Person  

WHERE LastName LIKE 'A%';  

GO  

-- SET NOCOUNT to ON to no longer display the count message.  

SET NOCOUNT ON;  

GO  

SELECT TOP(5) LastName  

FROM Person.Person  

WHERE LastName LIKE 'A%';  

GO  

-- Reset SET NOCOUNT to OFF  

SET NOCOUNT OFF;  

GO

Совет 5: Избегайте ORDER BY, GROUP BY и DISTINCT

Использование ORDER BY, GROUP BYи DISTINCT только в случае необходимости. SQL создает рабочие таблицы и помещает туда данные. Затем он организует данные в рабочей таблице на основе запроса и затем возвращает результаты.

Совет 6. Полностью уточняйте имена объектов базы данных

Цель использования полностью определенных имен объектов базы данных — устранить двусмысленность. Полное имя объекта выглядит так:

DATABASE.SCHEMA.OBJECTNAME.

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

Поэтому вместо использования такого оператора:

SELECT * FROM TableName

Вам следует использовать:

SELECT * FROM dbo.TableName

Совет 7. Узнайте, как полностью защитить свой код

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

textuserID = getRequestString("userID");

textSQL = "SELECT * FROM Users WHERE userID = " + textuserID;

Допустим, у вас есть это, вы textuserIDполучите ввод от пользователя. Вот как это может пойти не так:

SELECT * FROM Users WHERE userID = 890 OR 1=1;

Поскольку 1=1 всегда верно, он будет извлекать все данные из таблицы Users.

Вы можете защитить свою базу данных от SQL-инъекций, используя параметризованные операторы, проверки ввода, очистку ввода и т. Д. Как вы защищаете свою базу данных, зависит от СУБД. Вам нужно будет разобраться в своей СУБД и ее проблемах безопасности, чтобы вы могли писать безопасный код.

Совет 8: используйте LAG и LEAD для последовательных строк

Функция LAG позволяет запрашивать более одной строки в таблице, не вступая в таблицу к себе. Он возвращает значения из предыдущей строки таблицы.

LAG(expression [,offset[,default_value]]) OVER(ORDER BY columns)

Функция LEAD делает то же самое, но и для следующей строки.

LEAD(expression [,offset[,default_value]]) OVER(ORDER BY columns)

Отказ от использования самостоятельных соединений повышает производительность, поскольку уменьшается количество операций чтения. Но, вы должны проверить, как LEAD и LAG влияют на производительность запросов.

Что изучать дальше

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

  • Оптимизация просмотров
  • Вложенные запросы
  • INSERT триггеры
  • Внешние ключи

Удачного обучения!



2021-02-12T21:57:11
Вопросы читателей

Лучшие варианты доступа в Интернет для сельских предприятий

Плюсы и минусы различных вариантов Интернета для сельского бизнеса

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

* Обратите внимание, что коммутируемый доступ в Интернет технически доступен в сельской местности. Тем не менее, из-за требований к постоянному и надежному подключению для обеспечения непрерывности бизнеса на сегодняшнем рынке и с учетом того, что менее 0,3% по-прежнему используют коммутируемый доступ, коммутируемое соединение не обсуждается как жизнеспособный вариант Интернета для сельского бизнеса.

Итак, какие технологии от бизнес-интернет-провайдеров доступны в сельской местности? Вот плюсы и минусы различных вариантов Интернета в сельской местности:

 

Плюсы и минусы возможностей Интернета

Фиксированный беспроводной широкополосный доступ в Интернет

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

 

Плюсы фиксированного беспроводного Интернета:

  • Быстрое развертывание — фиксированные беспроводные Интернет-сети развертываются быстрее, чем конкурирующие проводные технологии.
  • Рентабельность — благодаря отсутствию дорогостоящих траншей, фиксированные беспроводные сети Интернет намного дешевле в строительстве и оказывают меньшее воздействие на окружающую среду.
  • Широко доступны — поскольку они используют радиоволны, фиксированные беспроводные сети Интернет могут достигать областей, находящихся «вне сети», таких как сельские районы.
  • Время безотказной работы — фиксированные беспроводные Интернет-сети.
  • Неограниченная пропускная способность.

Минусы фиксированного беспроводного Интернета:

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

 

Широкополосный DSL

Широкополосная цифровая абонентская линия (DSL) — это проводная технология, которая передает данные по традиционным медным телефонным линиям, установленным в дома и на предприятиях. Поскольку он работает на уже существующих телефонных линиях, DSL можно быстро установить при наличии инфраструктуры.

Плюсы DSL Интернета:

  • Доступность — поскольку DSL проходит через телефонные линии, он более доступен по всей стране.
  • Это относительно недорого — стоимость установки и обслуживания ниже, чем у многих других широкополосных технологий, таких как оптоволокно.

Минусы DSL Интернета:

  • Низкие скорости — скорость DSL в сельской местности обычно составляет от 128 Кбит/с до 3 Мбит/с.
  • Непостоянное качество сети — поскольку качество канала в значительной степени зависит от расстояния от центрального концентратора интернет-провайдера, серьезная проблема для многих предприятий в сельской местности, скорость и надежность сети непостоянны.

 

Спутниковый Интернет

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

Плюсы спутникового Интернета:

  • Широкая доступность — поскольку он передает на спутник в космосе, он доступен практически в любой точке Земли.
  • Достойные скорости — скорость до 100 Мбит/с, спутник превосходит DSL.

Минусы спутникового Интернета:

  • Проблемы с задержкой — Спутнику присущи проблемы с задержкой — это особенно проблематично для приложений видеоконференцсвязи и VoIP.
  • Ненадежный — качество цепи зависит от влаги (погоды) и таких объектов, как деревья и растительность.
  • Высокая стоимость. Спутниковый Интернет — одна из самых дорогих широкополосных технологий на рынке.

 

Кабельный широкополосный доступ

Cable Broadband использует модем для доступа в Интернет через те же коаксиальные кабели, которые доставляют изображение и звук на телевизор пользователя. В основном используемые для обслуживания бытовых потребителей, кабельные сети считаются разделяемыми цепями .

Плюсы кабельного широкополосного интернета:

  • Легко и быстро установить — поскольку он использует существующую инфраструктуру, он иногда может быть доступен сразу.
  • Быстрее — пропускная способность значительно выше, чем у других типов широкополосных подключений, таких как спутниковое и DSL.

Минусы кабельного широкополосного доступа:

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

 

Сотовый мобильный широкополосный Интернет

Мобильная широкополосная связь обеспечивает подключение к Интернету через мобильную сеть — ту же инфраструктуру, что и ваш смартфон. Мобильная широкополосная связь доступна через портативные беспроводные точки доступа и беспроводные модемы из любого места, где есть сотовая связь.

Плюсы мобильного широкополосного доступа:

  • Легкий доступ — при условии, что поблизости есть стойка регистрации, она может быть доступна немедленно.
  • Быстрая и простая установка — функция «подключи и работай» этой технологии устраняет необходимость в физических кабелях, телефонных линиях или источнике электроэнергии.

Минусы мобильного широкополосного доступа:

  • Непостоянное покрытие — если вы живете в удаленном районе, вы можете не получить сотовый прием, что полностью препятствует доступу.
  • Ненадежная производительность — средняя скорость мобильной связи в сельской местности падает примерно от 12 до 15 Мбит/с и колеблется в зависимости от местоположения и количества людей, подключенных к сети.
  • Ограничение использования данных. Чтобы предотвратить перегрузку сети, планы мобильного широкополосного доступа обычно имеют ограничение на объем данных. Излишки могут быть дорогими.

 

Оптоволоконный широкополосный Интернет

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

Плюсы Fiber Broadband:

  • Скорость. Оптоволокно обеспечивает скорость до нескольких гигабайт, что делает его одним из самых быстрых вариантов широкополосного доступа на рынке наряду с фиксированной беспроводной связью.
  • Масштабируемая и гибкая пропускная способность — после установки пропускную способность можно увеличивать или уменьшать практически по запросу.

Минусы Fiber Broadband:

  • Доступно не везде — волокно в настоящее время доступно только в 32% страны.
  • Дорого и медленно в развертывании — оптоволоконный кабель исключительно дорог в развертывании и требует рытья траншей (часто задерживается длительными процессами выдачи разрешений).

 

Сравнение плюсов и минусов интернет-возможностей для сельского бизнеса

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



2021-02-12T10:48:34
Сети

Как работает Ethernet

Ethernet — это сетевая технология, которая позволяет компьютерам и другим устройствам в одной сети связываться друг с другом. В отличие от беспроводной связи, в сети Ethernet сигналы проходят по проводам. Это тип сети, лежащей в основе локальных сетей (LAN), городских сетей (MAN) и глобальных сетей (WAN). Поскольку потребность в более высоких скоростях сети продолжает расти, технологии Ethernet также продолжают достигать новых высот. Раньше широко применялся стандарт Basic Ethernet, но скорость его сканирования составляла не более 10 Мбит/с. Скорость Ethernet позже значительно улучшилась до 100 Мбит/с с помощью стандарта Fast Ethernet. Хотя Fast Ethernet по-прежнему является наиболее распространенным стандартом, который используется сегодня, стандарты, поддерживающие более высокие скорости, такие как Gigabit Ethernet , который может обрабатывать до 1000 Мбит/с или 1 Гбит/с, и 10 Gigabit Ethernet, уже внедряются, особенно в крупных отраслях промышленности.

 

Как работает Ethernet

Каждое устройство в сети Ethernet имеет карту Ethernet, более известную как NIC (контроллер сетевого интерфейса). Эти устройства называются узлами , и они общаются друг с другом с помощью протоколов . В контексте сети протокол — это язык общения между подключенными устройствами. Узлы обмениваются данными через фреймы, блоки информации, которые узлы отправляют в виде коротких сообщений. Фреймы несут информацию, которую узел отправляет другому узлу. Если протокол — это язык, кадры — это предложения. Протокол Ethernet определяет набор правил для построения фреймов, и каждый фрейм имеет адрес назначения и адрес источника для идентификации отправителя и получателя фрейма. Нет двух узлов с одинаковым адресом. Устройства подключаются друг к другу через Ethernet-кабели, также называемые средой .

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

 

Встречные сигналы

Распространенной проблемой в сетях Ethernet является конфликт сигналов, который происходит, когда два или более компьютеров отправляют данные одновременно. CSMA / CD (множественный доступ с контролем несущей и обнаружением конфликтов) эффективно решает эту сетевую дилемму. С помощью Carrier Sens e компьютер проверяет, используется ли провод, перед отправкой информации, что применяется, когда многие компьютеры используют одно и то же соединение, например, множественный доступ . Когда устройства в сети отправляют информацию одновременно, эта информация будет конфликтовать и не будет отправлена ​​успешно. Обнаружение столкновений это способность устройств в сети обнаруживать, что другие устройства также отправили информацию другим устройствам. Когда это произойдет, указанные устройства будут ждать произвольное время, а затем попытаются повторно отправить информацию.

 

Кабели Ethernet

Кабели Ethernet связывают все устройства в сети. В настоящее время доступны два типа кабелей Ethernet: витая пара и оптоволоконный кабель. Тип используемых кабелей определяет производительность сети.

 

Кабели витой пары

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

Первым кабелем, использованным в сети Ethernet, был кабель категории 1 , который широко использовался в 1970-х годах. Этот кабель, также известный как коаксиальный кабель, состоит из скрученных телефонных проводов, завернутых в пластиковую оболочку. В последующих итерациях были улучшены частоты и производительность. Однако только в 1995 году произошел значительный скачок в частоте и скорости. Кабели категории 5 имеют частоту более 100 МГц и гораздо более высокую скорость 100 Мбит/с. Это было незадолго до того, как был введен кабель категории 5e или Cat 5e, увеличивший скорость до 1 Гбит/с. Категория 6кабель вышел в начале 21 века. Кабели Cat 6, работающие на частоте 250 МГц, могут передавать данные со скоростью 1 Гбит/с на расстояние более 330 футов и со скоростью 10 Гбит/с на расстоянии более 150 футов. Кабели Cat 6 также имеют экранирование для уменьшения помех. Усовершенствованный кабель Cat 6, кабель Cat 6A, работает на частоте 500 МГц, обеспечивая скорость передачи 1 Гбит/с на расстоянии 330 футов. Категория 7 следует за кабельной лестницей с более высокой частотой 600 МГц и выдающейся производительностью 10 Гбит/с на высоте 330 футов. Для усиления изоляции каждая пара проводов экранирована, а другой экран покрывает весь пучок проводов, что еще больше снижает помехи. Кабель Cat 7 был усовершенствован до Cat 7A, который передает 1 ГГц с поразительной скоростью 40 Гбит/с на расстояние 165 футов. Список становится все длиннее, последнее пополнение группы — Категория 8.кабель, работающий на максимальной частоте 2 ГГц и скорости 40 Гбит/с. Cat 7 и Cat 8 в основном используются в серверных комнатах и ​​центрах обработки данных, где требуется максимальная скорость.

 

Волоконно-оптические кабели

В настоящее время волоконная оптика занимает центральное место в области сетевых технологий. Волоконная оптика, изготовленная из стекловолокна, обеспечивает гораздо лучшие характеристики, чем традиционные медные провода. Волоконно-оптические кабели могут передавать данные со скоростью 10 Гбит/с на большие расстояния — 1000-6000 футов. Это устраняет необходимость в усилителях сигнала. Волоконная оптика также невосприимчива к помехам, в отличие от медных кабелей, поскольку они переносят свет вместо электричества. Таким образом, сигнал более надежен в оптоволоконных кабелях.

 

Преимущества Ethernet

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



2021-02-12T09:14:06
Сети

Уменьшают ли разветвители Ethernet скорость?

Многочисленные сетевые устройства, такие как коммутаторы, концентраторы и разветвители Ethernet, расширяют сеть. Самым простым среди этих устройств являются скромные разветвители Ethernet. Разветвители Ethernet — это недорогие крохотные сетевые устройства, которые разделяют один сигнал Ethernet на два. Это также одно из самых несложных сетевых устройств, которое не требует источника питания и специальных кнопок или индикаторов состояния на его корпусе. Это крошечное устройство довольно простое и состоит всего из трех портов Ethernet, двух с одной стороны и одного с другой. Некоторые типы имеют короткий кабель Ethernet с разъемом RJ45 с одной стороны и двумя портами Ethernet с другой стороны.

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

 

Правильная установка

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

У вас есть маршрутизатор в комнате A, и у вас есть два компьютера в комнате B, но у вас есть только одна розетка Ethernet в каждой комнате. В этом случае вы берете один разветвитель, подключаете два кабеля к маршрутизатору, подключаете другой конец кабелей к разветвителю, а затем подключаете один конец разветвителя к настенной розетке в комнате A. Это то место, где два сигнала от роутеры объединены в один. Затем возьмите другой разветвитель и подключите сторону с одним портом к настенной розетке в комнате B. Объединенный сигнал комнаты A теперь будет разделен на два, и теперь у вас есть два порта Ethernet для двух устройств в комнате B.

Как видите, один сплиттер используется для разделения двух сигналов, а другой — для их объединения, поэтому сплиттеры всегда должны быть парами. Количество кабелей и настенных розеток также уменьшается, поскольку нет необходимости добавлять еще одну настенную розетку Ethernet в каждой комнате и не нужно использовать два кабеля между этими разъемами. Это лишь один из простых сценариев, в которых разветвители Ethernet лучше всего служат своей цели.

 

Уменьшают ли разветвители Ethernet скорость?

Возможно, общий вопрос при использовании разветвителей Ethernet: «Будет ли это замедлять соединение?» Ответ будет полностью зависеть от типа сети, в которой используются разветвители. Разветвители Ethernet основаны на довольно старом стандарте 100BASE-T или более известном как Fast Ethernet, который обеспечивает номинальную скорость трафика 100 Мбит/с.

В кабеле Ethernet Cat5e есть 4 пары проводов, что означает в общей сложности 8 проводов в одном кабеле. В Fast Ethernet используются только две пары из четырех; две другие пары просто сидят там, неиспользованные. Сплиттер примет два сигнала со скоростью 100 Мбит/с от маршрутизатора, что означает два кабеля Ethernet, и объединит их на одном конце. Затем эти сигналы будут разделены на два сигнала 100 Мбит/с на другом конце. Таким образом, каждый порт на приемном конце разветвителя может передавать максимальную скорость 100 Мбит/с. Чтобы ответить на вопрос, то, если сплиттеры используются в сети 100 Мбит/с, нет, они не будут замедлять соединение. Однако, если ваш маршрутизатор может обеспечить скорость 1 Гбит/с и вы используете промежуточный разветвитель, то теоретически скорость будет значительно снижена до 100 Мбит/с. В этом случае разветвители действительно снизили скорость, и соединение будет медленнее.

 

За и против

Разветвители Ethernet могут пригодиться в определенных обстоятельствах, но у них есть много недостатков. Во-первых, они могут обеспечить максимальную скорость только 100 Мбит/с на порт Ethernet. В сети, которая может обеспечить скорость более 100 Мбит/с, ресурсы не будут полностью оптимизированы из-за этого ограничения. Более того, количество устройств, к которым вы можете подключиться, ограничено двумя, поэтому, если подключено более двух устройств, разветвители Ethernet не будут лучшим вариантом. Кроме того, если у вас есть только один оставшийся порт Ethernet в вашем маршрутизаторе, будет вообще невозможно использовать разветвители; нужно принести некоторые жертвы. Более того, хотя они уменьшают количество кабелей для соединения двух сетей, для работы установки по-прежнему требуются два разветвителя.

С другой стороны, разветвители Ethernet имеют несколько преимуществ. Они стоят намного дешевле, чем другое сетевое оборудование, и не требуют сложной настройки. Кроме того, в отличие от большинства сетевых устройств, им не требуется никакого программного обеспечения или конфигурации. Разветвители Ethernet — идеальный вариант в домашних сетях, где подключено меньше устройств, обычно максимум два устройства в одной комнате. Если вас устраивает соединение со скоростью 100 Мбит/с и у вас есть только два устройства для подключения, то лучше всего подойдут разветвители Ethernet.

Разветвители Ethernet существуют уже давно, но как бы они ни были просты, нет особых улучшений, позволяющих преодолеть их ограничения. Они по-прежнему основаны на устаревшем стандарте Fast Ethernet, который, возможно, уже не так важен при сегодняшнем спросе на более высокую скорость. Несмотря на то, что у них есть свои преимущества, в большинстве случаев они попросту не подходят. Сегодняшние технологические достижения позволяют надеяться на будущее разветвителей Ethernet. Какой-нибудь гений может просто поднять его до стандарта Gigabit Ethernet.



2021-02-11T19:42:38
Сети

Каким образом можно изучить C++ с нуля?

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

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

В этом посте мы познакомим вас с дорожной картой для начинающих по изучению C++ по курсам https://tutortop.ru/courses_selection/kursy_razrabotki_na_c/ или самостоятельно, чтобы вы могли чувствовать себя уверенно, начиная свой путь.

Вот что мы рассмотрим сегодня:

  • Краткая история C++
  • Обзор инструментов и программного обеспечения C++
  • Введение в язык и синтаксис C++
  • C++ Часто задаваемые вопросы
  • Следующие шаги

Давайте начнем!

Краткая история C++

Отличный способ начать работу с C++ — изучить его историю. C++ — один из старейших языков программирования, поэтому существует множество различных версий. Знакомство с этой историей поместит вас в сообщество программистов на C++ и даст вам представление о его возможностях.

Язык программирования C++ был изобретен в 1979 году Бьярном Страуструпом, когда он работал над своей докторской диссертацией в Bell Labs. C++ был разработан как расширение языка программирования C, отсюда и его первоначальное название «C с классами». Целью Страуструпа было добавить гибкости и ООП (объектно-ориентированного программирования) к языку C. Он включил такие функции, как классы, строгая проверка типов, аргументы функций по умолчанию и базовое наследование. Название было изменено на C++ в 1983 году, которое происходит от ++оператора.

C++ был выпущен для коммерческого использования в 1985 году, но еще не был стандартизирован. В 1990 году был выпущен компилятор Borland Turbo C++, который добавил много новых функций. Первый международный стандарт C++ был опубликован в 1998 году, известный как C++ 98.

Сюда входит стандартная библиотека шаблонов, предоставляющая общие функции программирования и структуры данных. На основании отзывов комитет пересмотрел эти стандарты в 2003 году, а язык обновления был переименован в C++ 03.

В 2011 году, когда был завершен C++ 11, язык претерпел еще одну ревизию. Эта версия включает auto, среди прочего, такие функции, как поддержка Regex, новые библиотеки, новый синтаксис для циклов, ключевое слово и новые классы контейнеров. С тех пор были выпущены еще две ревизии: C++ 14 и C++ 17.

Обзор инструментов C++

Чтобы правильно создавать программы на C++ во время прохождения курсов https://tutortop.ru/courses_selection/kursy_po_c_razrabotke/, вам необходимо знать несколько инструментов и программного обеспечения: текстовый редактор, компилятор C++, компоновщик и библиотеки.

Текстовые редакторы

Чтобы написать программу на C++, вам понадобится текстовый редактор. Думайте об этом как о пустом документе Microsoft Word; именно здесь вы будете писать свой код. Подойдет любой текстовый редактор, некоторые даже встроены в ваш компьютер, но мы рекомендуем использовать текстовый редактор, предназначенный для программирования. Есть много вариантов, но некоторые из наиболее распространенных текстовых редакторов для разработчиков на C++:

  • Notepad ++: открытый доступ, легкий, простой
  • Atom: бесплатно, поддерживает множество языков, ограниченное количество плагинов
  • Sublime Text: 80 долларов, уникальные функции, простой макет
  • Bluefish: легкий, быстрый, мультиплатформенный, поддерживает множество языков.

Компиляторы

Компилятор просматривает ваш исходный код для выполнения двух важных задач: во-первых, он проверяет, соответствует ли ваш код правилам языка C++; во-вторых, он переводит ваш код в объектный файл. Некоторые известные компиляторы — это GCC, Clang и компилятор Visual Studio C++. Мы не рекомендуем Turbo C++, так как он немного устарел.

Компоновщик

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

Библиотеки

Библиотека — это, по сути, предварительно упакованный пакет кода, который можно использовать повторно. Библиотека C++ называется стандартной библиотекой C++, и она связана почти со всеми программами на C++. Вы также можете добавить в свою программу другие библиотеки, если вам не нужна стандартная библиотека C++ .

Интегрированная среда разработки (IDE)

Многие программисты на C++ используют IDE вместо текстового редактора и компилятора. IDE — это универсальный инструмент для программирования на C++. Он включает текстовый редактор, компоновщик, компилятор и библиотеки. Не существует подходящего или неправильного компилятора. Все сводится к вашим потребностям и тому, какой макет лучше всего подходит для вас. Некоторые популярные IDE:

  • Code::Blocks: бесплатные, востребованные функции, плагины пользователей
  • Visual Studio Code: открытый исходный код, отличные функции, кроссплатформенность
  • Eclipse: открытый исходный код, простой, кроссплатформенный, необходимо установить компоненты C++

Введение в язык и синтаксис C++

C++ — объектно-ориентированный язык программирования. Это означает, что программы C++ моделируются вокруг объектов и классов, которыми вы можете управлять и манипулировать, применяя функции. Языки ООП предлагают четкую структуру программы и помогают разработчикам моделировать реальные проблемы.

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

У вас есть возможность выбирать, как распределяется память (например, стек или куча); в C++ нет интерпретатора, который помешал бы вам писать ошибочный код.

Чтобы начать работу с C++, вам необходимо ознакомиться с синтаксисом. Это проложит путь для оставшейся части вашего пути к C++ и поможет вам создавать оптимизированные программы, которые будут безопасными и не содержат ошибок.

Давайте посмотрим на код C++!

Глядя на приведенный ниже код, вам может быть интересно, что все это такое и что это значит. Добро пожаловать в синтаксис C++.

Что такое синтаксис? Синтаксис подобен грамматике языка программирования. Это основная основа всего, что вы будете писать на C++.

Это правила, которые определяют, как вы пишете и понимаете код C++. Давайте посмотрим на пример кода, чтобы познакомиться с синтаксисом.

#include <iostream> //header file library 

using namespace std; //using standard library



int main() { //main function

  cout << "Hello World n"; // first object

  cout << "Learn C++ nn"; //second object with blank line

  cout << "Educative Team"; //third object 

  return 0; //no other output or return

} //end of code to exectute

Объяснение синтаксиса

#include <iostream>— это библиотека заголовочного файла. Заголовочный файл импортирует функции в вашу программу. По сути, мы просим программу скопировать содержимое из файла с именем <iostream>. Это означает поток ввода и вывода , и он определяет стандарты для объектов в нашем коде.

using namespace std означает, что мы используем имена объектов и переменных из стандартной библиотеки ( std). Этот оператор часто сокращается с помощью ключевого слова std и оператора ::. int main( ) используются для определения основной функции.

Это очень важная часть программ на C++. Функция по существу определяет действие для вашего кода. Все, что находится в фигурных скобках { }, будет выполнено.

cout это объект (произносится «видеть»). В этом примере он определяет наши выходные данные: строки слов. Мы пишем новый объект, используя cout во второй строке. Символ n заставляет текст исполняться в другой строке.

Включение двух nn создает пустое пространство. Выражением return 0 мы сообщаем программе, что ничего не вернется. Мы выводим только строки текста. Обратите внимание, что мы используем << оператор для именования наших объектов. Точка с запятой ; функционирует как точка.

Термины и словарь C++

Теперь, когда у нас есть представление о том, как выглядит код C++, давайте определим некоторые из упомянутых нами терминов и познакомим вас с некоторыми другими.

Ключевые слова

Ключевые слова — это заранее определенные имена, которые можно использовать для идентификации вещей в вашем коде. Ключевые слова — это идентификаторы определенных объектов, переменных или действий. Вы также можете создавать свои собственные ключевые слова. Вот несколько примеров ключевых слов:

  • goto
  • float
  • public
  • class(1)
  • int

Переменные

Переменные подобны контейнерам, в которых хранятся значения. Чтобы объявить переменную, вы должны присвоить ей значение type и  использовать правильное ключевое слово. Всем переменным в C++ необходимо имя или идентификатор. При создании идентификаторов необходимо соблюдать несколько основных синтаксических правил.

  • Имена чувствительны к регистру
  • Имена могут содержать буквы, цифры и символы подчеркивания.
  • Имена должны начинаться с буквы или символа подчеркивания.
  • Имена не могут содержать пробелы или специальные символы (!, #, @ И т. Д.)
  • Имена не могут использовать зарезервированные ключевые слова

Есть шесть различных типов переменных:

int myNum = 5;               // Stores integers (whole numbers)

float myFloatNum = 5.99;     // Stores decimals loating point number

double myDoubleNum = 9.98;   // Floating point number

char myLetter = 'D';         // Stores single characters

bool myBoolean = true;       // Stores Boolean, values with a true or false state

string myText = "Hello";     // Stores strings of text

Типы данных

Типы данных — это классификации различных типов данных, которые вы можете использовать в программе. Типы данных сообщают нашим переменным, какие данные они могут хранить. В C++ есть три типа данных:

Примитивные типы данных: это встроенные данные, которые вы можете использовать для объявления переменных. Они включают в себя integer, character, boolean, floating point, double floating point, void, и wide character.

Производные типы данных: они являются производными от примитивных типов данных. Они включают в себя function, reference, array, и pointer.

Типы данных, определяемые пользователем: они определяются вами, программистом.

Строки

Строки — это объекты в C++. Они представляют собой набор символов в " " кавычках, как наша строка "Hello World". Поскольку они являются объектами, мы можем выполнять с ними функции, такие как функция length( ), определяющая длину строки.

Операторы

Операторы — это символы, которые управляют нашими данными и выполняют операции. В C++ мы можем перегружать операторы, чтобы они работали для классов, определенных программистом. Перегрузка оператора в основном означает, что оператор может одновременно выполнять более одной функции. В языке C++ есть четыре типа операторов

  • Арифметические операторы используются для математических операций. Они работают как алгебраические символы.
    cout << x + y // This adds x to y

  • Операторы присваивания предназначены для присвоения значений нашим переменным.
    int x = 10 // This defines x as 10

  • Операторы сравнения сравнивают два значения.
    x <= y // Determines x is greater than or equal to y

  • Логические операторы определяют логику между значениями.
    x < 4 && x <9 // Will return true if both statements are true about x

Объекты

Объект — это набор данных, с которыми мы можем действовать. У объекта в C++ есть атрибут (его свойства) и метод (его возможности). Вы создаете объекты, используя класс. Думайте об этом как о чертеже объекта.

Вы создаете класс, используя ключевое слово class. Вы должны определить спецификатор доступа, например public, private или protected. В ключевых словах public говорится, что класс доступен за пределами этого класса. Определив свой класс, вы можете определять свои атрибуты и объекты. Взгляните ниже на пример класса и объекта.

#include <iostream>

using namespace std;

class Dog //this is the name of our class

{

public:

  string name = "rover"; //this is an attribute

  string gender = "male";

  int age = 5;

};

int main() {

  Dog dogObj; //here we are making an object of Dog class

  cout << "Dog name is: "<<dogObj.name<<endl; //by using . operator we can access the member of class

  cout << "Dog gender is: "<<dogObj.gender<<endl; //accessing the public members of class Dog in main()

  cout << "Dog age is: "<<dogObj.age<<endl;

}

Функции

Функции — это блоки кода, которые запускаются при вызове. Они являются рабочей лошадкой для вашей программы и используются для выполнения операций и манипуляций с вашим кодом.

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

Чтобы создать функцию, вы должны дать ей имя (так называемое объявление) и круглые скобки ( ). Затем вы можете вызвать эту функцию в любой момент, используя это name( ).

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

Условные утверждения

Они позволяют выполнять проверки того, следует ли выполнять блок кода. В C++ есть четыре условных оператора:

  • if: при выполнении определенного условия будет выполнено определенное действие
  • else: вместо этого будет выполнено определенное действие, если это условие не выполнено
  • else if: новое условие будет проверено, если первое не выполнено
  • switch: проверяет переменную на соответствие списку значений

Циклы

Циклы похожи на условные операторы. Они выполняют блоки кода, пока достигается определенное условие. В C++ есть два типа циклов:

  • while циклы: этот цикл будет продолжать повторять ваш код, пока условие не возвращается true.
  • for циклы: это используется, когда вы знаете точное количество циклов в своем коде.

Теперь, когда у вас есть базовое представление о синтаксисе C++, давайте рассмотрим некоторые часто задаваемые вопросы и ресурсы, которые помогут вам начать путешествие по C++.

C++ FAQ

Сколько времени нужно, чтобы изучить C++?

Ну, это действительно зависит от того, что подразумевается под «учиться». Если вы серьезно относитесь к этому языку, то вы никогда не закончите его изучение. Разработчики могут посвятить всю свою карьеру C++ и при этом чувствовать, что им есть чему поучиться.

С учетом сказанного, если вы поработаете, вы сможете выучить достаточно C++ за 1-2 года и при этом оставаться отличным разработчиком.

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

Для чего используется C++?

C++ ориентирован на производительность больших систем, поэтому он используется в большом количестве программ и задач, где производительность важна. Это включает в себя, помимо прочего, операционные системы, разработку игр, 3D-анимацию, веб-браузеры (они используются в Firefox и Chrome), программное обеспечение для офисов, медицинское программное обеспечение и многое другое. C++ используется во всех играх Blizzard, большинстве консольных игр, Adobe Photoshop, Mozilla Thunderbird, технологиях PDF и сканерах МРТ.

В чем разница между C и C++?

Основное отличие состоит в том, что C++ является объектно-ориентированным языком, а C — процедурным языком программирования. C не позволяет определять функции внутри структур, в то время как C++ делает это. C и C++ также имеют несколько различных функций, ключевых слов и процедур распределения памяти.

В чем разница между C++ и C #?

C# — гораздо более новый язык (созданный Microsoft в 2000 году), он построен на C++, поэтому они имеют схожий синтаксис. Одно из основных различий между ними — их гибкость. C# показывает предупреждения компилятора при написании кода, чтобы уменьшить количество ошибок, а C++ — нет.

C# работает только в ОС Windows, а C++ может работать на любой платформе (MacOS, Linux, Windows и т. Д.). C# отлично подходит для мобильных и веб-приложений, а C++ известен производительностью и программами, которые работают напрямую с оборудованием. Они также немного по-другому обрабатывают управление памятью.

Схож ли C++ с другими языками программирования?

C++ является основой для многих других объектно-ориентированных языков программирования, таких как Java, JavaScript, Python, PHP, Rust, C # и других. Изучение синтаксиса C++ облегчит изучение других языков программирования.

Какой язык программирования лучше всего изучать?

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

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

Насколько востребован C++? За С++ хорошо платят?

Да и да. Если вы потратите время, то будете вознаграждены. У разработчиков C++ уже есть высокие зарплаты, и ожидается, что они будут расти в ближайшие годы. C++ переживает период возрождения популярности, поскольку он отлично подходит для таких надежных приложений, как беспилотные автомобили и виртуальная реальность. Поскольку у C++ более крутая кривая обучения, чем у большинства языков, полученные вами навыки выделят вас при приеме на работу.



2021-02-11T15:37:54
Вопросы читателей

Как использовать функцию NumPy unique() в Python

Библиотека NumPy используется в Python для создания одного или нескольких размерных массивов, и у нее есть много функций для работы с массивом. Функция unique() — одна из полезных функций этой библиотеки для определения уникальных значений массива и возврата отсортированных уникальных значений. Эта функция также может возвращать кортеж значений массива, массив ассоциативных индексов и количество раз, когда каждое уникальное значение появляется в основном массиве. В этом руководстве показаны различные варианты использования этой функции.

 

Синтаксис:

Синтаксис этой функции приведен ниже.

array numpy.unique(input_array, return_index, return_inverse, return_counts, axis)

Эта функция может принимать пять аргументов, назначение которых объясняется ниже.

  • input_array: это обязательный аргумент, который содержит входной массив, из которого выходной массив будет возвращен путем извлечения уникальных значений. Если массив не является одномерным массивом, то массив будет сглаженным.
  • return_index: это необязательный аргумент, который может принимать логическое значение. Если для этого аргумента установлено значение True, он вернет индексы входного массива.
  • return_inverse: это необязательный аргумент, который может принимать логическое значение. Если для этого аргумента установлено значение True, он вернет индексы выходного массива, который содержит уникальные значения.
  • return_counts: это необязательный аргумент, который может принимать логическое значение. Если для этого аргумента установлено значение True, он вернет количество раз, когда каждый элемент уникального массива появляется во входном массиве.
  • axis: это необязательный аргумент, который может принимать любое целочисленное значение или None. Если для этого аргумента не задано значение, входной массив будет сглажен.

Функция unique() может возвращать четыре типа массивов на основе значений аргументов.

 

Пример 1: Распечатать уникальные значения одномерного массива

В следующем примере показано использование функции unique() для создания массива с уникальными значениями одномерного массива. В качестве значения аргумента функции unique() используется одномерный массив из 9 элементов. Возвращенное значение этой функции напечатано позже.

# Импортировать библиотеку NumPy



import numpy as np



# Создать массив целого числа



np_array = np. unique ([55, 23, 40, 55, 35, 90, 23, 40, 80])



# Распечатать уникальные значения



print("Массив уникальных значений: n", np_array)

 

Выход :

Входной массив содержит 6 уникальных элементов, которые отображаются на выходе.

 

Пример 2: Распечатать уникальные значения и индексы на основе входного массива

В следующем примере показано, как можно получить уникальные значения и индексы двумерного массива с помощью функции unique(). В качестве входного массива используется двумерный массив из 2 строк и 6 столбцов. Для аргумента return_index установлено значение True, чтобы получить индексы входного массива на основе уникальных значений массива.

# Импортировать библиотеку NumPy



import numpy as np



# Создать двумерный массив



np_array = np. array([ [ 6, 4, 9, 6, 2, 9 ], [ 3, 7, 7, 6, 1, 3 ] ])



# Распечатать двумерный массив



print("Содержимое двумерного массива : n", np_array)



# Создайте уникальный массив и индексный массив уникальных значений



unique_array, index_array = np. unique(np_array, return_index = True)



# Распечатать значения уникального и индексного массивов



print("Содержимое уникального массива: n", unique_array)



print("Содержимое индексного массива: n", index_array)

 

Выход :

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

Пример 3: Распечатать уникальные значения и индексы на основе выходного массива

В следующем примере показано, как уникальные значения одномерного массива и индексы основаны на уникальных значениях с помощью функции unique (). В сценарии в качестве входного массива используется одномерный массив из 9 элементов. Значение аргумента return_inverse установлено в True, что вернет другой массив индексов на основе уникального индекса массива. И уникальный массив, и индексный массив напечатаны позже.

# Импортировать библиотеку NumPy



import numpy as np



# Создать массив целочисленных значений



np_array = np. array([ 10, 60, 30, 10, 20, 40, 60, 10, 20 ])



print("Значения входного массива: n", np_array)



# Создайте уникальный массив и обратный массив



unique_array, inverse_array = np.unique(np_array, return_inverse=True)



# Распечатать значения уникального массива и обратного массива



print("Значения уникального массива: n", unique_array)



print("Значения обратного массива: n", inverse_array)

 

Выход :

На выходе был показан входной массив, уникальный массив и обратный массив. Входной массив содержит 5 уникальных значений. Это 10, 20, 30, 40 и 60. Входной массив содержит 10 в трех индексах, которые являются первым элементом уникального массива. Итак, 0 появился в обратном массиве трижды. Остальные значения обратного массива были размещены таким же образом.

 

Пример 4: Распечатайте уникальные значения и частоту каждого уникального значения

В следующем примере показано, как функция unique () может получить уникальные значения и частоту каждого уникального значения входного массива. Значение аргумента return_counts было установлено в True для получения массива значений частоты. Одномерный массив из 12 элементов был использован в функции unique () в качестве входного массива. Массив уникальных значений и значения частоты были напечатаны позже.

# Импортировать библиотеку NumPy



import numpy as np



# Создать массив целочисленных значений



np_array = np. array([70, 40, 90, 50, 20, 90, 50, 20, 80, 10, 40, 30])



print("Значения входного массива: n", np_array)



# Создать уникальный массив и подсчитать массив



unique_array,count_array = np.unique(np_array, return_counts = True)



# Распечатать значения уникального массива и обратного массива



print("Значения уникального массива: n", unique_array)



print("Значения массива count: n", count_array)

Выход :

Входной массив, уникальный массив и массив счетчиков были напечатаны в выходных данных.

 

Заключение

Подробное использование функций unique() было объяснено в этом руководстве с использованием нескольких примеров. Эта функция может возвращать значения различных массивов, показанных здесь, с использованием одномерных и двумерных массивов.



2021-02-11T10:14:44
Python