По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Apache Cassandra — это программное обеспечение распределенной базы данных с открытым исходным кодом для работы с базами данных NoSQL. Это программное обеспечение использует язык запросов Cassandra - CQL в качестве основы для связи. CQL хранит данные в таблицах, организованных в виде набора строк со столбцами, содержащими пары ключ-значение. Таблицы CQL сгруппированы в контейнеры данных, которые в Cassandra называются пространствами ключей (keyspace). Данные, хранящиеся в одном пространстве ключей, не связаны с другими данными в кластере. Таким образом, вы можете иметь таблицы для разных целей в отдельных пространствах ключей в кластере, и данные не будут совпадать. В этом руководстве вы узнаете, как создать таблицу Cassandra для различных целей, а также как изменять, удалять или очищать таблицы с помощью оболочки Cassandra. Выбор пространства ключей для таблицы Cassandra Прежде чем вы начнете добавлять таблицу, вам нужно определить пространство ключей, в котором вы хотите создать свою таблицу. Есть два варианта сделать это. Вариант 1: команда USE Запустите команду USE, чтобы выбрать пространство клавиш, к которому будут применяться все ваши команды. Для этого в оболочке cqlsh введите: USE keyspace_name; Затем вы можете начать добавлять таблицы. Вариант 2. Укажите имя пространства ключей в запросе Второй вариант — указать имя пространства ключей в запросе на создание таблицы. Первая часть команды перед именами столбцов и параметрами выглядит так: CREATE TABLE keyspace_name.table_name Таким образом, вы сразу же создаете таблицу в заданном пространстве ключей. Базовый синтаксис для создания таблиц Cassandra Создание таблиц с помощью CQL похоже на SQL-запросы. В этом разделе мы покажем вам основной синтаксис для создания таблиц в Cassandra. Основной синтаксис для создания таблицы выглядит следующим образом: CREATE TABLE tableName ( columnName1 dataType, columnName2 dataType, columnName2 datatype PRIMARY KEY (columnName) ); При желании вы можете определить дополнительные свойства и значения таблицы, используя WITH: WITH propertyName=propertyValue; Например, используйте его, чтобы определить, как хранить данные на диске или использовать ли сжатие. Типы первичных ключей Cassandra Каждая таблица в Cassandra должна иметь первичный ключ, что делает строку уникальной. С первичными ключами вы определяете, какой узел хранит данные и как он их разделяет. Существует несколько типов первичных ключей: Простой первичный ключ. Содержит только одно имя столбца в качестве ключа секции, чтобы определить, какие узлы будут хранить данные. Составной первичный ключ. Использует один ключ разделения и несколько столбцов кластеризации, чтобы определить, где хранить данные и как их сортировать в разделе. Составной ключ раздела. В этом случае есть несколько столбцов, которые определяют, где хранить данные. Таким образом, вы можете разбить данные на более мелкие части, чтобы распределить их по нескольким разделам, чтобы избежать горячих точек. Как создать таблицу Cassandra В следующих разделах объясняется, как создавать таблицы с различными типами первичных ключей. Сначала выберите пространство ключей, в котором вы хотите создать таблицу. В нашем случае: USE businesinfo; Каждая таблица содержит столбцы и тип данных Cassandra для каждой записи. Создать таблицу с простым первичным ключом Первый пример — это базовая таблица с поставщиками. Идентификатор уникален для каждого поставщика и будет служить первичным ключом. CQL-запрос выглядит следующим образом: CREATE TABLE suppliers ( supp_id int PRIMARY KEY, supp_city text, supp_email text, supp_fee int, supp_name text, supp_phone int ); Этот запрос создал таблицу с именем supplier с supp_id в качестве первичного ключа для таблицы. Когда вы используете простой первичный ключ с именем столбца в качестве ключа раздела, вы можете поместить его либо в начало запроса (рядом со столбцом, который будет служить первичным ключом), либо в конец, а затем указать имя столбца: CREATE TABLE suppliers ( supp_id int, supp_city text, supp_email text, supp_fee int, supp_name text, supp_phone int PRIMARY KEY(supp_id) ); Чтобы увидеть, находится ли таблица в пространстве ключей, введите: DESCRIBE TABLES; В выводе перечислены все таблицы в этом пространстве ключей, а также та, которую вы создали. Чтобы отобразить содержимое таблиц, введите: SELECT * FROM suppliers; Вывод показывает все столбцы, определенные при создании таблицы. Другой способ просмотреть сведения о таблице — использовать DESCRIBE и указать имя таблицы: DESCRIBE suppliers; В выходных данных отображаются столбцы и настройки по умолчанию для таблицы. Создать таблицу с составным первичным ключом Чтобы запросить и получить результаты, отсортированные в определенном порядке, создайте таблицу с составным первичным ключом. Например, создайте таблицу для поставщиков и всех продуктов, которые они предлагают. Поскольку продукты могут не быть уникальными для каждого поставщика, необходимо добавить один или несколько столбцов кластеризации в первичный ключ, чтобы сделать его уникальным. Схема таблицы выглядит так: CREATE TABLE suppliers_by_product ( supp_product text, supp_id int, supp_product_quantity text, PRIMARY KEY(supp_product, supp_id) ); В этом случае мы использовали supp_product и supp_id для создания уникального составного ключа. Здесь первая запись в скобках supp_product — это ключ раздела. Он определяет, где хранить данные, то есть как система разделяет данные. Следующая запись — столбец кластеризации, определяющий, как Cassandra сортирует данные, в нашем случае — по supp_id. Изображение выше показывает, что таблица была успешно создана. Чтобы проверить детали таблицы, запустите запрос DESCRIBE TABLE для новой таблицы: DESCRIBE TABLE suppliers_by_product; Настройки по умолчанию для порядка кластеризации — по возрастанию (ASC). Вы можете перейти на нисходящий (DESC), добавив следующий оператор после первичного ключа: WITH CLUSTERING ORDER BY (supp_id DESC); Мы указали один столбец кластеризации после ключа раздела. Если вам нужно отсортировать данные с использованием двух столбцов, добавьте еще один столбец в скобки первичного ключа. Создание таблиц с использованием составного ключа раздела Создание таблицы с составным ключом раздела полезно, когда на одном узле хранится большой объем данных, и вы хотите разделить нагрузку на несколько узлов. В этом случае определите первичный ключ с ключом секции, состоящим из нескольких столбцов. Вам нужно использовать двойные скобки. Затем добавьте столбцы кластеризации, как мы делали ранее, чтобы создать уникальный первичный ключ. CREATE TABLE suppliers_by_product_type ( supp_product_consume text, supp_product_stock text, supp_id int, supp_name text, PRIMARY KEY((supp_product_consume, supp_product_stock), supp_id) ); В приведенном выше примере мы разделили данные на две категории: расходные материалы поставщика и продукты, запасаемые на складе, и распределили данные с помощью составного ключа раздела. Примечание. При таком разделении каждая категория продуктов хранится на отдельном узле, а не в одном разделе. Если вместо этого вы используете составной первичный ключ с простым ключом раздела и несколькими столбцами кластеризации, то один узел будет обрабатывать все данные, отсортированные по нескольким столбцам. Удалить таблицу в Cassandra Чтобы удалить таблицу в Cassandra, используйте оператор DROP TABLE. Чтобы выбрать таблицу, которую вы хотите удалить, введите: DESCRIBE TABLES; Найдите таблицу, которую хотите удалить. Используйте имя таблицы, чтобы удалить ее: DROP TABLE suppliers_by_product_type; Запустите запрос DESCRIBE TABLES еще раз, чтобы убедиться, что вы успешно удалили таблицу. Изменить таблицу в Cassandra Cassandra CQL позволяет добавлять или удалять столбцы из таблицы. Используйте команду ALTER TABLE, чтобы внести изменения в таблицу. Добавить столбец в таблицу Перед добавлением столбца в таблицу рекомендуется просмотреть содержимое таблицы, чтобы убедиться, что имя столбца еще не существует. После проверки используйте запрос ALTER TABLE в этом формате, чтобы добавить столбец: ALTER TABLE suppliers_by_product ADD supp_name text; Снова используйте DESCRIBE TABLE, чтобы убедиться, что столбец появился в списке. Удалить столбец из таблицы Подобно добавлению столбца, вы можете удалить столбец из таблицы. Найдите столбец, который вы хотите удалить, с помощью запроса DESCRIBE TABLES. Затем введите: ALTER TABLE suppliers_by_product DROP supp_product_quantity; Примечание. Не указывайте тип данных для столбца, если вы хотите удалить его из таблицы. Вы получите ошибку “SyntaxException: line 1:48 mismatched input ‘text’ expecting EOF (ALTER TABLE suppliers_by_product DROP supp_name [text]…)” Очистить таблицу в Cassandra Если вы не хотите удалять всю таблицу, но вам нужно удалить все строки, используйте команду TRUNCATE. Например, чтобы удалить все строки из таблицы поставщиков, введите: TRUNCATE suppliers; Чтобы убедиться, что в вашей таблице больше нет строк, используйте оператор SELECT. После очистки таблицы изменения становятся постоянными, поэтому будьте осторожны при использовании этого запроса. Итоги В этом руководстве показано, как создавать таблицы в Cassandra для различных целей с использованием простых и составных первичных ключей. Примеры также включали использование составного ключа раздела для распределения данных по узлам. Мы также рассмотрели, как вы можете удалять, изменять и очищать таблицы в Cassandra. Убедитесь, что вы удаляете или вносите изменения в правильные таблицы, чтобы избежать потенциальных проблем.
img
Введение Однажды в организации, где я работаю, случился Asterisk Случился не без моего участия, а если быть точным, то я и был главным виновником, и как следствие - главным исполнителем. Напасть была локальной, но достаточно быстро получила широкое распространение, хотя, в отдельных уголках приходилось нести прогресс в массы с применением тяжелой артиллерии и напалма. В итоге Asterisk`ом было охвачено порядка полутора тысяч абонентов. Процесс настройки абонента изначально выглядел следующим образом: Включил телефон, обновил прошивку. Пока он перезагружается, завел абонента на Asterisk (создал запись для регистрации SIP-клиента). Далее, самый очевидный способ настройки телефона - web-интерфейс; набрал в адресной строке браузера IP-адрес телефона, авторизовался, настроил два десятка параметров и готово. На всё ушло 2-3 минуты. Следующий абонент - повторяем. На втором десятке абонентов начало надоедать, появилось желание как-нибудь упростить процесс. Заглянул в настройки: экспорт и импорт конфигурации присутствует; сохранил конфигурацию телефона в файл, заглянул в него - обычный текстовый файл, в котором перечислены параметры с их значениями. Нашел параметры, значения которых менял в web-интерфейсе, причем большинство из этих параметров, хоть и отличается от дефолтных, но одинаково для всех настраиваемых в рамках данной организации телефонов. Таким образом, имея эталонный файл конфигурации и редактируя в нем всего 5-6 строк, я получал конфигурации для остальных телефонов, которые "заливал" в аппараты всё через тот же web-интерфейс. Спустя какое-то время количество абонентов заметно выросло, компания продолжала развиваться, сотрудники мигрировали между подразделениями, увольнялись, появлялись новые, некоторые телефоны выходили из строя, и возня с файлами стала постепенно отнимать много времени и раздражала с каждым днем всё больше. Тут я вспомнил про пункт меню из web-интерфейса, в котором были написаны многообещающие слова "Auto Provision". Обратимся за определением к производителям телефонов. У Dlink или Fanvil мы получим следующее: Auto Provisioning используется для реализации удаленной/автоматической инсталляции, развертывания конфигурационных и некоторых других связанных файлов. Snom дает нам практически такое же: Auto Provisioning может использоваться для предоставления общих и специфических параметров конфигурации на телефоны и для актуализации прошивки. Вроде бы всё устраивает, значит, будем для наших целей отталкиваться от этих определений. Вариантов автоматической настройки предусмотрено несколько, и без долгих терзаний, как наиболее понятный и доступный был выбран следующий: Развертывание конфигурации с tftp сервера, адрес которого телефон будет получать по DHCP в Option 66. Разберемся вкратце, что есть что. TFTP - простой протокол передачи файлов (Trivial File Transfer Protocol). В отличие от FTP основан на транспортном протоколе UDP и в нем отсутствует возможность аутентификации (однако, возможна фильтрация по IP-адресу). Одно из основных преимуществ TFTP - простота реализации клиента, поэтому он достаточно широко используется в частности для загрузки обновлений и конфигураций сетевых устройств. DHCP - протокол динамической настройки узла (Dynamic Host Configuration Protocol); сетевой протокол, позволяющий сетевым устройствам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Не вдаваясь глубоко в подробности, схема обмена сообщениями DHCP при получении параметров выглядит следующим образом: DHCPDISCOVER: клиент (в нашем случае, телефон) передает это сообщение broadcast, и использует его для поиска DHCP-серверов в своей канальной среде. В одном из полей этого пакета, в поле options, клиент передает список необходимых ему опций, наиболее распространенными из которых являются: (1) - Subnet Mask (3) - Router (6) - Domain Name Server (15) - Domain Name именно в этом поле клиент сообщает о том, что ему нужен адрес tftp сервера для загрузки конфигурационного и/или других связанных файлов. Номер опции, которая его содержит - 66 (у cisco есть аналогичная опция 150, основное отличие которой в том, что она может содержать адреса нескольких tftp серверов). DHCPOFFER: cервер отвечает на запрос клиента. Сервер может передать это сообщение как broadcast так и unicast (зависит от значений полей полученных от клиента). В этом сообщении сервер предлагает клиенту параметры, которые он может отдать в текущей конфигурации. Если в сегменте сети клиента несколько DHCP серверов, то получив запрос, они все отправляют OFFER-ы. После того, как клиент выбрал, OFFER какого из DHCP серверов принять, он отправляет следующий пакет: DHCPREQUEST: казалось бы, если клиент определился, какой DHCP сервер "пришелся ему по душе", можно передать unicast-запрос этому серверу; однако предается broadcast, чтобы уведомить остальные DHCP серверы о своём выборе (добавляется опция 54, указывающая адрес выбранного DHCP-сервера), и они могли освободить зарезервированные OFFER-ы. DHCPACK: cервер отправляет подтверждение клиенту. После этого клиент настраивает свой сетевой интерфейс, используя предоставленные параметры и опции. В различных ситуациях могут еще возникать DHCPDECLINE, DHCPNAK, DHCPRELEASE, DHCPINFORM, но их рассмотрение в рамки данной статьи не входит. Для получения исчерпывающей информации о работе DHCP можно обратиться к RFC 2131: https://tools.ietf.org/html/rfc2131 Про опции 66 и 150 можно почитать здесь: https://wiki.merionet.ru/ip-telephoniya/67/dhcp-opciya-150-i-66/ https://blog.router-switch.com/2013/03/dhcp-option-150-dhcp-option-66/ Про настройку DHCP сервера и Option 66 на Mikrotik можно почитать здесь: https://wiki.merionet.ru/seti/5/nastrojka-dhcp-servera-na-mikrotik/ Чтобы передать телефону адрес tftp сервера, с которого он может получить конфигурационный файл, на DHCP сервере в параметрах области задаем Option 66, в которой указываем hostname либо IP адрес нашего tftp сервера. Настройки по-умолчанию в большинстве телефонов подразумевают получение IP-адреса по DHCP и запрос Option 66. В итоге, телефон получает IP, получает адрес tftp сервера и пытается "стянуть" оттуда файл своей конфигурации. Согласно документации Dlink, загрузка файла конфигурации происходит следующим образом: Устанавливается соединение с сервером. Проверяется наличие файла с соответствующим именем: - в первую очередь проверяется файл с именем соответствующим аппаратной платформе; - во вторую - соответствующий MAC адресу устройства; - в третью - соответствующий ID устройства; - файл с произвольным именем проверяется либо в последнюю очередь (DHCP option, UpnP) либо в первую, если он явно указан в конфигурации телефона. Проверяется версия конфигурационного файла. Если версия выше, чем текущая на телефоне, файл конфигурации применяется. Как уже говорилось ранее, файл конфигурации представляет собой текстовый документ определенного вида: Первая строка: <<VOIP CONFIG FILE>>Version:2.0002 Для того, чтобы конфигурация была применена, версия файла должна быть выше, нежели текущая на телефоне, инкрементировать требуется последний разряд версии. По-умолчанию версия конфигурации 2.0002 Пример: Текущая версия конфигурации 2.0002 на одном телефоне и 2.0004 на еще двух. Для того чтобы конфигурация применилась только на один телефон в первой строке файла конфигурации ставим <<VOIP CONFIG FILE>>Version:2.0004 для того чтобы обновить конфигурацию на всех телефонах ставим в первой строке <<VOIP CONFIG FILE>>Version:2.0005 Разделы: <GLOBAL CONFIG MODULE - содержит данные о сетевых настройках, серверах DNS, SNTP... <LAN CONFIG MODULE> - содержит данные о настройках LAN, режимах работы LAN <TELE CONFIG MODULE> - настройки расширенных функций телефонной части (Call Feature) <DSP CONFIG MODULE> - настройка кодеков <SIP CONFIG MODULE> - настройки SIP, серверы, регистрация etc... <PPPoE CONFIG MODULE> - настройки PPPoE <MMI CONFIG MODUL>E - настройки доступа и WEB интерфейса <QOS CONFIG MODULE> - qos и vlan <DHCP CONFIG MODULE> - настройки внутреннего DHCP <NAT CONFIG MODULE> - настройки NAT и ALG <PHONE CONFIG MODULE> - настройки телефонной части, в этом же разделе настраивается remote phonebook и extension key. <SCREEN KEY CONFIG MODULE> - настройка программных клавиш (для версии F3) <AUTOUPDATE CONFIG MODULE> - настройки Autoprovision <VPN CONFIG MODULE> - настройки VPN <TR069 CONFIG MODULE> - настройки TR069 Заканчивается файл строкой <<END OF FILE>> Для обновления какой-либо опции конфигурации телефона, чтобы файл конфигурации был принят телефоном достаточно наличие следующих полей: <<VOIP CONFIG FILE>> Version:2.0002 <Название необходимого раздела> Название опции: значение <<END OF FILE>> Например, для обновления имени хоста телефона необходимо создать следующий файл конфигурации: <<VOIP CONFIG FILE>>Version:2.0003 <GLOBAL CONFIG MODULE> Host Name :ReceptionPhone <<END OF FILE>> Все остальные элементы являются необязательными. Итак, овал нарисован. Остались сущие мелочи - реализовать инструмент для создания конфигураций и дальнейшего управления ими. Займемся этим в следующей публикации.
img
Данная тема важна так как позволяет изменять приоритет процессов в операционной системе Linux. Иногда возникает такая ситуация, что необходимо изменить приоритет процессов, какой - то процесс сделать более приоритетным, отдав побольше ресурсов, а какой-то менее приоритетным забрав часть ресурсов сервера. В данной теме мы рассмотрим следующие вопросы: Научимся определять приоритеты процессов; Рассмотрим, как запускать программы с повышенным приоритетом или с пониженным; Посмотрим, как изменять приоритет запущенных программы. В Linux любой процесс может иметь приоритет от -20 до +19. Во FreeBSD до +20. Максимальным приоритетом считается, тот процесс у которого минимальное число. Т.е. максимальный по приоритету процесс будет иметь число - 20, а минимальный -19 соответственно. Поэтому задача с приоритетом -20 будет выполняться в первую очередь с максимум ресурсов и наоборот задача с +19 будет выполняться в последнюю очередь и минимум ресурсов. Linux для установки приоритетов использует такую программу nice и renice. Для того, чтобы рассмотреть данную тему воспользуемся командой ps aux. Запуская данную команду мы получаем все сведения о запущенных процессах на данном сервере. Так же мы можем увидеть от какого пользователя данный процесс запущен. Теперь мы используем другой набор ключей для команды ps. Чтоб получить нам интересующий вывод данных используем команду ps alx. Мы можем видеть, что получили немного другую информацию. Появилась колонка, промаркированная "NI" и колонка "PRI". Мы можем видеть, что верхние процессы выполняются с nice 0, т.е. это авторитет по умолчанию, который присваивается если не сказано иного. Возьмем другой вариант команды ps, с другими ключами. ps -eo user,pid,pcpu,nice,comm -e - ключ показывать все -o - output т.е какая информация нужна, далее в команде перечисляется необходимая информация (колонки) После ввода данной команды, мы видим, что столбцов стало меньше. Только то, что мы запрашивали, пользователь, ID процесса, загрузка CPU, приоритет и какая команда. Для того, чтобы понять, что такое приоритет, попробуем использовать команду sleep, которая позволяет, остановить операционную систему на указанное число секунд. sleep 10000 & И выведем команду ps -eo user,pid,pcpu,nice,comm | grep sleep, используя pipline сортируем по названию процесса sleep. Вот, что у нас вышло. Видим наш запущенный процесс. Далее запустим какую-нибудь задачу с максимальным приоритетом. Это полезно если мы хотим запустить, какой ни будь серьезный процесс, чтобы он получил максимальный приоритет. Как пример, срочная переиндексация базы данных на сервере с максимальным приоритетом или программку, которая будет собирать информацию о системе с минимальным приоритетом. nice sleep 60000 И мы можем увидеть, что появился наш процесс со значение 10 по умолчанию. Десять - это приоритет по умолчанию, и он ниже, чем ноль. Чем выше значение, тем приоритет ниже. Т.е. получается если мы запускаем с командой niсе, то процесс запускает с приоритетом ниже в 2 раза, чем просто если бы запустили. Мы можем принудительно завершить процессы. killall sleep. Попробуем запустить задачу с минимальным приоритетом. Для этого воспользуемся параметром. Команда будет выглядеть следующим образом. nice -n 19 sleep 6000 Как мы видим все получилось. Процесс запущен с минимальным приоритетом. Аналогично запускается процесс с максимальным приоритетом. nice -n -20 sleep 6000 Тут нужно пояснить, что задачи с наивысшим приоритетом, могут пользователи только с правами root. Если мы бы попытались сделать из-под обычного пользователя, то ничего у нас бы не вышло. killall sleep, еще раз завершим принудительно процессы. Запустим еще раз процесс с наименьшим приоритетом. nice -n 19 sleep 60000. Теперь изменим приоритет текущего процесса. Для этого есть следующая команда: renice 5 -p 416802 - т.е 5 - новый приоритет , 416802 - id процесса. Как мы видим все успешно поменялось. Вот таким образом мы можем динамически менять приоритеты. В Операционной системе Windows мы так же можем менять приоритеты в менеджере задач, но если там пять уровней, то в Linux их получается 40. Мы можем так же менять приоритеты определенному пользователю. renice приоритет -u пользователь Данные команды, нам позволяют гибко управлять распределением ресурсов на нашем сервере.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59