Что такое CRUD-операции


Оглавление (нажмите, чтобы открыть):

Разница между REST и CRUD

Я узнал REST, и он очень похож на CRUD (из того, что я прочитал о CRUD).

Я знаю, что они разные, и мне интересно, думают ли они, что они похожи, я их не понимаю.

Является ли это, что REST является «надмножеством» CRUD? Делает ли все CRUD и многое другое?

6 ответов

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

CRUD означает основные операции, выполняемые в репозитории данных. Вы напрямую обрабатываете записи или объекты данных; кроме этих операций, записи являются пассивными объектами. Обычно это просто таблицы и записи базы данных.

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

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

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

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

Короче говоря, CRUD представляет собой набор примитивных операций (в основном для баз данных и статических хранилищ данных), в то время как REST — очень высокоуровневый API-интерфейс (в основном для веб-сервисов и других «живых» систем).

Первый манипулирует базовыми данными, другой взаимодействует со сложной системой.

Прежде всего, оба являются просто обычными инициалами; им нечего бояться.

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

REST — это именованная практика (как AJAX), а не сама технология. Он поощряет использование возможностей, которые уже давно присущи протоколу HTTP, но редко используются.

Если у вас есть URL (Uniform Resource Locator ), и вы указываете на него браузер по адресной строке, вы отправляете HTTP-запрос . Каждый HTTP-запрос содержит информацию, которую сервер может использовать, чтобы узнать, какой HTTP-ответ отправить обратно клиенту, который выдал запрос.

Каждый запрос содержит URL-адрес, поэтому сервер знает, какой ресурс вы хотите получить доступ, но он также может содержать метод . Метод описывает, что делать с этим ресурсом.

Но эта концепция «метода» не использовалась очень часто.

Обычно люди просто ссылаются на страницы с помощью метода GET и выпускают any тип обновлений (удаление, вставки, обновления) с помощью метода POST.

И из-за этого вы не можете рассматривать один ресурс (URL) как истинный ресурс сам по себе. У вас должны быть отдельные URL-адреса для удаления, вставки или обновления одного и того же ресурса. Например:

С помощью REST вы создаете формы умнее , потому что они используют другие методы HTTP в стороне от POST и программируют ваш сервер, чтобы иметь возможность различать методы , а не только URLS. Так, например:

Помните, что один URL-адрес описывает один ресурс. Единственный пост — это единственный ресурс. С помощью REST вы обрабатываете ресурсы так, как они предназначены для лечения. Вы сообщаете серверу, какой ресурс вы хотите обрабатывать, и как его обрабатывать.

В «RESTful architecture» есть много других функций, о которых вы можете прочитать в Википедии, других статьях или книгах, если вам интересно. С другой стороны, для самого CRUD не так уж много.

REST означает «передачу репрезентативного состояния», что означает, что все это связано с передачей и изменением состояния какого-либо ресурса в системе.

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

С другой стороны, CRUD является мнемоником для общих операций, необходимых для данных в базе данных: Create Retrieve Update Delete. Но это действительно не глубже, чем это.

Итак, это ответ на ваш вопрос, но я расскажу об общей ошибке, которую я вижу, когда REST и CRUD обсуждаются вместе. Многие разработчики хотят напрямую сопоставлять REST с CRUD, поскольку REST через HTTP предоставляет GET PUT POST и DELETE, тогда как CRUD обеспечивает CREATE RETRIEVE UPDATE DELETE. Естественно хотеть отображать глаголы REST непосредственно в CRUD-операции.

Однако HTTP использует стиль «создать или обновить», в то время как CRUD отделяет создание и обновление. Это делает невозможным (!) Сделать чистое общее отображение между двумя (!)

GET и DELETE легко . GET === RETRIEVE и DELETE === DELETE.

Но по спецификации HTTP PUT на самом деле создает и обновляет:

Используйте PUT для создания совершенно нового объекта, когда вы все знаете об этом, включая его идентификатор

Используйте PUT для обновления объекта (обычно с полным представлением объекта)

POST — это «обрабатывающий» глагол и считается «добавочным» глаголом:

Используйте POST для добавления нового объекта в коллекцию, то есть создайте новый объект

POST также используется, когда ни один из других глаголов не подходит, поскольку спецификация HTTP определяет его как глагол обработки данных

Если ваша команда повесилась на POST, помните, что весь WWW был построен на GET и POST;)

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

CRUD определяет минимальный набор основных глаголов хранения для чтения и записи данных: создание, чтение, обновление и удаление. Затем вы можете создавать другие операции, объединяя их. Обычно это считается операциями с базой данных, но то, что считается базой данных, является произвольным (например, может быть реляционной СУБД, но также может быть файлами YAML).

REST — это «архитектурный стиль», который обычно включает операции CRUD и другие операции более высокого уровня, которые должны выполняться по некоторой концепции «ресурсов» (произвольно, но это объекты в вашем приложении). REST имеет кучу ограничений , которые делают его интересным (и особенно хорошо связанным с HTTP).

Интерфейс REST может, но не обязательно, показывать все операции CRUD на конкретном ресурсе. То, что доступно в интерфейсе REST, является произвольным и может изменяться из-за системных разрешений, соображений пользовательского интерфейса и того, как это было в тот день, когда был спроектирован и создан интерфейс. Большие дни приводят к более минималистским интерфейсам, как правило, хотя может быть и наоборот.

CRUD

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


ОТДЕЛ

REST означает перенос репрезентативного состояния (иногда это произносится как «REST»)

Он опирается на безвизовый, клиент-серверный, кэшируемый протокол связи — и практически во всех случаях используется протокол HTTP

REST — это стиль архитектуры для проектирования сетевых приложений.

REST — это что-то вроде веб-страницы для машин, которую они могут просматривать, в то время как CRUD — это что-то вроде SOAP, который тесно связан с его клиентами. Это основные различия. Ofc. они похожи на поверхности, но CRUD описывает основные манипуляции с объектами, тогда как REST может описывать интерфейс любого приложения. Другое отличие, что REST может использовать больше 4 HTTP-методов. Это был бы очень длинный ответ, если бы я хотел собрать все различия, если вы проверите вопросы о REST и SOAP, тогда вы найдете большинство из них.

Я думаю, что запутанный REST с CRUD — очень распространенная ошибка, и причина в том, что разработчики не имеют времени, чтобы подробно прочитать о REST. Они просто хотят использовать эту технологию — не понимая ее — на основе ограниченного примера стиля CRUD, написанного аналогичными разработчиками. Подавляющее большинство примеров и учебников отражают серьезную нехватку знаний. Символом этого является сопоставление ресурсов REST с объектами и HTTP-методами с CRUD-операциями этих объектов и использование REST без гиперссылок. С помощью REST вы сопоставляете гиперссылки (включая ссылки с методами POST /PUT /DELETE /PATCH) для своих операций, и вы определяете операцию на стороне клиента, проверяя отношение ссылки (обычно для API). Если клиент REST не знает, что такое связь ссылок, и знает только HTTP-методы и, возможно, некоторые шаблоны URI, то это не клиент REST, а CRUD на HTTP-клиенте. Еще одна распространенная ошибка, что клиент REST — одностраничное javascript-приложение, работающее в браузере. Конечно, вы можете реализовать такого клиента, но REST был предназначен главным образом для автоматических клиентов (серверных приложений, написанных разработчиками, которых вы даже не знаете), а не для ручных клиентов (написанных вами управляемых браузером приложений). Наличие только одного клиента браузера может быть признаком того, что вам не нужен REST, и вы просто переработали проект. В этих случаях CRUD API является жизнеспособным решением, и разработчики называют эти CRUD API как REST, потому что они не знают разницы.

Что такое CRUD-операции

Большинство операций с данными так или иначе представляют собой CRUD операции (Create, Read, Update, Delete), то есть создание, получение, обновление и удаление. Entity Framework Core позволяет легко выполнять все эти действия.

Для примера создадим проект по типу Console App (.NET Core) . И после создания проекта сразу добавим в него функциональность EF Core. Для этого в проект через NuGet пакеты Microsoft.EntityFrameworkCore.SqlServer и Microsoft.EntityFrameworkCore.Tools .

Затем добавим в проект класс User, объекты которого будут храниться в базе данных:

И добавим класс контекста данных ApplicationContext:

Далее определим в классе Program все базовые операции с данными:

И после выполнения мы получим следующий консольный вывод:

Добавление

Для добавления объекта используется метод Add , определенный у класса DbSet, в который передается добавляемый объект:

Метод Add устанавливает значение Added в качестве состояния нового объекта. Поэтому метод db.SaveChanges() сгенерирует выражение INSERT для вставки модели в таблицу.

Если нам надо добавить сразу несколько объектов, то мы можем воспользоваться методом AddRange() :

Удаление

Удаление производится с помощью метода Remove :

Данный метод установит статус объекта в Deleted, благодаря чему Entity Framework при выполнении метода db.SaveChanges() сгенерирует SQL-выражение DELETE.

Если необходимо удалить сразу несколько объектов, то можно использовать метод RemoveRange() :

Редактирование

При изменении объекта Entity Framework сам отслеживает все изменения, и когда вызывается метод SaveChanges() , будет сформировано SQL-выражение UPDATE для данного объекта, которое обновит объект в базе данных.

Но надо отметить, что в данном случае действие контекста данных ограничивается пределами конструкции using. Но рассмотрим другой пример. Мы получаем объект в одном месте,а обновляем в другом. Например:

Несмотря на то, что объект user не равен null, имеется в базе данных, но во втором блоке using обновления соответствующего объекта в БД не произойдет. И в этом случае нам надо использовать метод Update:

При необходимости обновить одновременно несколько объектов, применяется метод UpdateRange() :

Создаем CRUD-приложение с помощью Yii за считанные минуты

Yii – это высокопроизводительный фреймворк, который работает быстро, безопасно и хорошо подходит для приложений Web 2.0.

Мастер Йода рекомендует:  Среда создания сайтов

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

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

Приступим

Я исхожу из того, что у вас уже установлены Apache, PHP (5.1 или выше) и MySQL , поэтому первым нашим шагом будет загрузка файлов фреймворка. Зайдите на официальный сайт Yii и скачайте последнюю стабильную версию (на момент написания статьи – версия 1.1.13).

Распакуйте ZIP-архив, чтобы получить папку yii-1.1.13.e9e4a0 (идентификатор версии может отличаться в зависимости от версии, которую вы загрузили), переименуйте папку в yii, затем поместите ее в ваш корневой каталог, доступный из сети.

В моем случае, это C:wampwww таким образом, путь к файлам фреймворка будет следующим: C:wampwwwyii .

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

Затем мы должны проверить, какие функции Yii будут поддерживаться нашей системой. Откройте ссылку http://localhost/yii/requirements в вашем браузере, чтобы увидеть детали требований фреймворка.

Поскольку мы будем работать с базой данных MySQL, расширение MYSQL PDO должно быть разрешено.

Мы хотели быстро проверить требования Yii, и поэтому поместили файлы в доступный каталог, но рекомендуется хранить файлы Yii вне сетевого каталога. После проверки можете свободно переместить файлы Yii куда угодно.

Двигаемся дальше

Каждое веб-приложение имеет свою структуру каталога, и Yii приложения также нуждаются в поддержке иерархичной структуры внутри сетевого каталога.

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

Эта команда создаст скелет приложения под названием yiitest с минимальным набором необходимых файлов. Внутри вы найдете файл index.php , который служит в качестве скрипта входа, он принимает пользовательские запросы и решает, какой контроллер должен обработать запрос.


Фреймворк Yii основан на принципах MVC и ООП, поэтому вы должны разбираться в этих темах. Если вы не знакомы с MVC, почитайте серию статей The MVC Pattern and PHP , которая предлагает хорошее введение в эту тему.

В Yii URL-адрес выглядит как http://localhost/yiitest/index.php?r=controllerID/actionID . Например, в блоговой системе URL может быть следующим: http://localhost/yiitest/index.php?r=post/create. post – это идентификатор контроллера, а create – идентификатор действия.

Основываясь на идентификаторах, скрипт входа решает, какой контроллер и метод вызвать.

Контроллер, имеющий идентификатор post, должен быть назван PostController (идентификатор получается путем отсечения суффикса Controller от имени класса и изменением первой буквы на строчную).

Идентификатор действия – это идентификатор метода, представленного в контроллере подобным образом; внутри PostController должен быть метод под названием actionCreate() .

Может быть несколько представлений, ассоциированных с одним контроллером, поэтому мы храним файлы представлений внутри папок protected/views/controllerID .

Мы можем создать файл представления для нашего контроллера под названием create.php в описанном выше каталоге, и затем представить его пользователям, просто написав следующий код в actionCreate():

Также, если нужно, можно передать дополнительные данные в представление. Это делается следующим образом:

Внутри файла представления мы можем получить доступ к данным через переменную $data.

Представление также имеет доступ к переменной $this , которая указывает на экземпляр контроллера, воспроизводящего представление.

Более того, если вы хотите иметь удобные для пользователя URL-адреса, то можете раскомментировать следующий участок кода в файле protected/config/main.php :

Тогда URL-адреса будут выглядеть следующим образом: http://localhost/yiitest/controllerID/actionID .

Разработка CRUD приложения

Теперь, когда вы знаете важные соглашения по Yii, пришло время приступить к CRUD. В этой части мы разработаем простую систему, в которой пользователь может выполнять CRUD операции (создание, извлечение, обновление и удаление) с сообщением в блоге.

Создадим базу данных MySQL под названием yiitest и внутри нее создадим таблицу posts. Таблица будет иметь только три столбца: идентификатор ( id ), название ( title ) и контент ( content ).

Откройте файл конфигурации вашего приложения ( protected/config/main.php ) и раскомментируйте следующие строки:

Замените testdrive на имя вашей базы данных, то есть, yiitest. Также вы должны обеспечить полномочия, необходимые Yii для подключения.

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

Например, класс Post – это модель для таблицы сообщений. Объект этого класса представляет собой строку из таблицы posts и имеет атрибуты для отражения значений столбцов.

Для того чтобы быстро генерировать модель, мы будем использовать веб-инструмент Yii под названием gii . Этот инструмент может быть использован для генерации моделей, контроллеров и форм для CRUD операций.

Чтобы использовать gii в вашем проекте, найдите следующие строки в файле конфигурации вашего проекта, раскомментируйте их добавьте пароль.

Затем обратитесь к gii с помощью следующего адреса: http://localhost/yiitest/index.php?r=gii . Если вы используете дружественные пользователю URL-адреса, адрес будет такой: http://localhost/yiitest/gii .

Кликнете на Model Generator. gii попросит вас ввести имя таблицы; введите posts для имени таблицы, а для имени модели используйте Post. Затем кликнете Generate для создания модели.

Проверьте папку protected/models, и вы найдете там файл Post.php.

Теперь кликнете на CRUD Generator . Введите в качестве имени модели Post. Идентификатор контроллера автоматически заполнится как post.

Это означает, что новый контроллер будет сгенерирован под именем PostController.php .

Кликнете на Generate. Сгенерируется контроллер, а также несколько файлов представления с формами, необходимыми для CRUD операций.

Теперь у вас есть совершенно новое CRUD приложение! Кликнете на ссылку try it now , чтобы протестировать его. Для управления сообщениями вам нужно будет войти как admin/admin .

Для того, чтобы создать новое сообщение, вам нужно обратиться по адресу http://localhost/yiitest/post/create , а для обновления определенного сообщения просто откройте в браузере ссылку http://localhost/yiitest/post/update/postID .

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

Заключение

Yii – это очень мощный фреймворк, если речь заходит о разработке проектов поколения Web 2.0. Фактически, вы только что увидели, как легко создать полностью функционирующую CRUD систему всего за несколько минут!

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

Данная публикация представляет собой перевод статьи « Build a CRUD App with Yii in Minutes » , подготовленной дружной командой проекта Интернет-технологии.ру

Создание, чтение, обновление и удаление — Create, read, update and delete

В компьютерном программировании , создание, чтение, обновление и удаление ( CRUD ) являются четыре основных функциями постоянного хранения . Альтернативные слова иногда используются при определении четырех основных функций CRUD , например, получить вместо чтения , редактирования вместо обновления , или уничтожить вместо удаления . CRUD также иногда используется для описания пользовательского интерфейса конвенций , которые облегчают просмотр, поиск и изменение информации ; часто с использованием компьютерных на основе форм и отчетов . Термин был , вероятно , первым популяризировали Джеймс Мартин в его книге 1983 года Управления по данным базовой среды . Акроним может быть продлен до CRUDL , чтобы покрыть список больших наборов данных , которые приносят дополнительные сложности , такие как пагинация , когда наборы данных слишком велики , чтобы легко удерживаться в памяти.

содержание

База данных приложения

Акроним CRUD относится ко всем основным функциям, которые реализуются в реляционных баз данных приложений . Каждая буква в аббревиатуре можно сопоставить со стандартным Structured Query Language (SQL) заявление, протокол передачи гипертекста метод (HTTP) (это , как правило , используется для создания RESTful API — интерфейсы ) или служба распространения данных (DDS) операции:

операция SQL HTTP RESTful WS ДДС
Создайте ВСТАВИТЬ PUT / POST СООБЩЕНИЕ записывать
Чтение (Извлечение) ВЫБРАТЬ ПОЛУЧИТЬ ПОЛУЧИТЬ чтения / принимать
Update (Изменить) ОБНОВИТЬ PUT / POST / PATCH ПОЛОЖИЛ записывать
Delete (уничтожить) УДАЛЯТЬ УДАЛЯТЬ УДАЛЯТЬ располагать

Сравнение операций CRUD базы данных ориентированы на методы HTTP имеет некоторые недостатки. Строго говоря, как PUT и POST могут создавать ресурсы; Основное различие заключается в том, что POST оставляет на сервере, чтобы решить, на какой URI, чтобы сделать новый ресурс, доступный, в то время как PUT диктует, что URI для использования; URI, как концепции не совпадают с аккуратно CRUD. Существенно о PUT является то, что он заменит любой ресурс URI, ранее со ссылкой на с совершенно новой версией, поэтому метод PUT быть перечислен для обновления, а также. PUT является «заменить» операцию, которой можно было бы утверждать не «обновление».

Хотя реляционная база данных обеспечивает общий уровень постоянного хранения программных приложений, существуют многочисленные другие слои инерционности. Функциональность CRUD , например , может быть реализована с помощью объектных баз данных , база данных XML , плоских текстовых файлов или пользовательских форматов файлов.


Пользовательский интерфейс

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

  • Создание и добавление новых записей
  • Читайте, извлекать, поиск, или просмотреть существующие записи
  • Обновление или редактировать существующие записи
  • Удалить / отключить / удалить существующие записи

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

Другие варианты

Другие варианты включают в себя CRUD:

  • ХЛЕБ (Просмотр, чтение, редактирование, добавление, удаление)
  • DAVE (удаление, добавление, просмотр, редактирование)
  • ДЕРЬМО (Create, Replicate, Append, процесс)

Что такое CRUD-операции

CRUD (сокр. от англ. create, read, update, delete — «создать, прочесть, обновить, удалить») — акроним, обозначающий четыре базовые функции, используемые при работе с персистентными хранилищами данных [1] :

Термин стал популярным благодаря книге Джеймса Мартина (англ. James Martin ) «Managing the Data-base Environment», выпущенной в 1983 году [2] .

Содержание

Примеры

Операция Оператор в языке SQL Операция в протоколе HTTP
Создание (create) INSERT POST
Чтение (read) SELECT GET
Редактирование (update) UPDATE PUT или PATCH
Удаление (delete) DELETE DELETE

См. также

  • Шаблон проектирования «Active record».

Примечания

  1. ↑ InfoWorld. Developer world. REST and CRUD: the Impedance Mismatch. Дата публикации: 29 января 2007. Автор: Martin Heller.
  2. ↑ Martin, James (1983), Managing the Data-base Environment, Englewood Cliffs, New Jersey: Prentice-Hall, с. 381, ISBN 0135505828 .

Ссылки

  • Примеры CRUD для различных фреймворков на языке Java (англ.)
Это заготовка статьи о программировании. Вы можете помочь проекту, дополнив её.
  • Модель данных
  • Реляционная
    • модель
    • алгебра
    • Нормальная форма
    • Ссылочная целостность
    • БД
    • СУБД
  • Иерархическая модель
  • Сетевая модель
  • Объектно-ориентированная
    • БД
    • СУБД
  • Транзакция
  • Журнализация
  • Секционирование
  • Потенциальный

  • Первичный
  • Внешний
  • Естественный
  • Суррогатный (искусственный)
  • Суперключ
Компоненты

Что такое Wiki.sc Вики является главным информационным ресурсом в интернете. Она открыта для любого пользователя. Вики это библиотека, которая является общественной и многоязычной.

Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License.

Взаимодействие с данными ElasticSearch при помощи операций CRUD

Гибкий поиск и индексирование – очень важный, а иногда и абсолютно необходимый аспект работы веб-приложений и сайтов. Для этого существует множество сложных решений, которые управляют данными и позволяют взаимодействовать с ними по HTTP. Но есть и альтернативные средства; например, ElasticSearch – поисковый движок, ставший популярным благодаря простой настройке и гибкости.

В этой статье речь пойдёт о взаимодействии с ElasticSearch.

Требования

  • Предварительно настроить сервер Ubuntu 12.04.
  • Заранее установить ElasticSearch (инструкции по установке можно найти здесь).

Основы работы ElasticSearch

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

ElasticSearch предоставляет RESTful API, с которым можно взаимодействовать; в основном этот тип интерфейса описывает способ взаимодействия клиента и сервера. Серверы REST позволяют взаимодействовать с данными при помощи операций HTTP (GET, POST, PUT, DELETE) и не хранят информацию о состоянии. Каждый запрос является независимым; ресурсы возвращаются в общих текстовых форматах (таких как JSON).

API-интерфейс ElasticSearch позволяет взаимодействовать с данными при помощи HTTP-глаголов и передает параметры и информацию посредством использования компонентов URI. Это означает, что он хранит данные на основе того, как отформатированы URI.

Мастер Йода рекомендует:  Управление рекламными кампаниями в Google AdWords стало еще более эффективным

При типичном взаимодействии с ElasticSearch нужно указать используемую операцию, чтобы определить, какие действия будут выполнены на данных. Чтобы извлечь информацию, можно использовать команду GET. Чтобы создать или обновить записи, используются команды PUT или POST.

Методы CRUD

CRUD расшифровывается как «Create, Read, Update, Delete». Все эти операции необходимы для продуктивного управления постоянным хранилищем данных. Кроме того, они эквивалентны методам HTTP, благодаря чему их можно использовать для взаимодействия с данными с помощью стандартных методов. Методы CRUD реализованы с помощью методов HTTP (POST, GET, PUT, DELETE).

API-интерфейс ElasticSearch позволяет выполнять все эти операции.

Рассмотрим работу ElasticSearch подробнее. Для примера можно использовать curl, поскольку:

  • метод HTTP можно указать явно,
  • взаимодействовать с ElasticSearch можно в терминальной сессии.

По умолчанию ElasticSearch работает на порте сервера 9200.

Создание контента

Создание объектов в ElasticSearch обычно называется индексацией. Это простой процесс добавления данных в хранилище и распределение их по категориям. Создавать объекты в ElasticSearch можно при помощи HTTP-методов PUT или POST.

В своей простейшей форме команда может содержать индекс, тип и идентификатор хранящегося объекта. В целом она имеет такой вид:

curl -X PUT http://server_name.com:9200/index/type/object_id -d ‘< >‘

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

Тип в данном случае – это произвольная категоризация. Вы можете создавать разные типы, основное назначение которых – группировка определенной информации. Например, можно создать типы данных «users» или «documents».

Id нужно указать при создании команды PUT; команда POST генерирует id автоматически.

После флага –d нужно указать объект, который нужно сохранить. Это JSON-подобный объект, имеющий гибкий формат. Категории создаются на ходу, потому можете указать любую категорию.

К примеру, индекс для оборудования детских площадок может иметь такой вид:

curl -XPUT «http://localhost:9200/playground/equipment/1» -d ‘ < "type": "slide", "quantity": 2 >‘

В случае если операция выполнена успешно, программа должна вернуть:

Как видите, вывод сообщает, что предоставленная информация была проиндексирована. Обратите внимание: программа управляет версиями информации (это может пригодиться позже).

Команда PUT также позволяет обновлять информацию. Чтобы указать, что запись нужно создать, а не обновить, используйте сегмент /_create:


curl -XPUT «http://localhost:9200/playground/equipment/1/_create» -d ‘< "type": "slide", "quantity": 2 >‘

Если такой документ уже существует, API вернёт ошибку:

Чтение данных

Все внесённые данные в дальнейшем можно извлечь. Для чтения контента используется HTTP-метод GET.

Основной синтаксис извлечения данных содержит индекс, тип и id:

curl -XGET «http://localhost:9200/playground/equipment/1»

Эта команда выведет сохранённую ранее информацию. Ключевое слово _source в выводе указывает источник данных:

Чтобы получить вывод в более удобном для восприятия формате, добавьте в конец запроса опцию ?pretty:

curl -XGET «http://localhost:9200/playground/equipment/1?pretty»
<
«_index» : «playground»,
«_type» : «equipment»,
«_id» : «1»,
«_version» : 2,
«exists» : true, «_source» : < "type": "slide", "quantity": 1 >
>

Чтобы получить только сам документ, добавьте в запрос /_source:

curl -XGET «http://localhost:9200/playground/equipment/1/_source?pretty»

Чтобы вывести определённые поля, добавьте в запрос ?fields= , :

curl -XGET «http://localhost:9200/playground/equipment/1?fields=type»

Эта команда вернёт отфильтрованный вывод:

Обновление контента

Для обновления контента используется HTTP-команда POST, которая позволяет изменять данные при помощи скриптов и параметров. Также для этого можно использовать команду PUT, которая, по сути, пересоздаёт объект, заменяя его новой версией.

Чтобы обновить данные при помощи команды POST, нужно добавить в URI опцию /_update. Для обозначения объекта используются ключи script и params. Команда может ссылаться на внутренние ключи документа при помощи префикса ctx._source.

К примеру, чтобы обновить количество горок на детской площадке, можно ввести:

Попробуйте теперь извлечь данные и обратите внимание на количество:

curl -XGET «http://localhost:9200/playground/equipment/1/_source»

Чтобы добавить новое поле, нужно просто обновить объект и присвоить значение новому ключу:

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

Чтобы удалить поле, используйте метод .remove, задав имя ненужного поля:

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

curl -XPOST «http://localhost:9200/playground/equipment/1/_update» -d ‘ < "doc" : < "type": "swing" >>’

Чтобы убедиться, что всё прошло успешно, запросите документ:

curl -XGET «http://localhost:9200/playground/equipment/1/_source»

Удаление контента

ElasticSearch удаляет данные/документы по их ID. Для этого используется HTTP-метод DELETE.

К примеру, чтобы удалить созданный ранее документ с ID 36, нужно набрать:

curl -XDELETE «http://localhost:9200/playground/equipment/36»

Это означает, что операция прошла успешно. Если объекта с указанным в команде ID не существует, команда вернёт такой результат:

Ключ found сообщает, был ли найден и обработан запрашиваемый объект.

Поиск данных

Для поиска объектов используется компонент /_search. Его можно добавлять после сервера, индекса или типа в зависимости от области, которую нужно найти.

К примеру, чтобы найти на сервере все данные с количеством 4, нужно ввести:

Чтобы получить удобный для восприятия вывод, используйте опцию pretty:

curl -XGET «http://localhost:9200/_search?q=quantity:4&pretty»
<
«took» : 14,
«timed_out» : false,
«_shards» : <
«total» : 25,
«successful» : 25,
«failed» : 0
>,
«hits» : <
«total» : 1,
«max_score» : 1.0,
«hits» : [ <
«_index» : «playground»,
«_type» : «equipment»,
«_id» : «1»,
«_score» : 1.0, «_source» : <"type":"slide","quantity":4>
> ]
>
>

Чтобы выполнить поиск только в определённых полях, а остальные поля исключить, добавьте в поиск индекс и тип URI:

curl -XGET «http://localhost:9200/playground/equipment/_search?q=quantity:4&pretty»

Чтобы указать тип, но исключить индекс, замените индекс компонентом _all:

curl -XGET «http://localhost:9200/_all/equipment/_search?q=quantity:4&pretty»

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


curl -XGET «http://localhost:9200/playground/equipment/_search» -d ‘ < "query": < "term": < "type": "slide" >> >’

Заключение

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

ElasticSearch – очень гибкое средство для быстрой индексации объектов; его функции почти безграничны с точки зрения его способности генерировать результаты поиска.

Эта статья знакомит вас только с некоторыми основными понятиями ElasticSearch. Его можно использовать как инструмент для быстрого поиска, а можно создать сложный объект индексации для детального поиска информации.

Что такое CRUD-операции

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

Create

Read

  • Просмотр профиля пользователями сайта
  • Просмотр пользователя в административном интерфейсе

Update

  • Обновление личных данных
  • Смена емейла
  • Смена пароля

Delete

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

Хозяйке на заметку. Иногда в качестве шутки веб-разработчиков называют крудошлепами, а фронтенд-разработчиков формошлепами 😀

Создание полного круда включает в себя следующие действия:

  • Создание сущности в коде (как правило класса)
  • Добавление таблицы в базу
  • Написание тестов на обработчики
  • Добавление обработчиков
  • Добавление шаблонов

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

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

Глагол Маршрут Шаблон Описание
GET /users users/index.phtml Список пользователей
GET /users/

users/show.phtml Профиль пользователя
GET /users/new users/new.phtml Форма создания нового пользователя
POST /users Создание нового пользователя
GET /users//edit users/edit.phtml Форма редактирования пользователя
PATCH/PUT /users/

Обновление пользователя
DELETE /users/

Удаление пользователя

Такое соглашение изначально появилось в Rails и затем было адаптировано во многих фреймворках на языках отличных от Ruby.

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

Что такое CRUD-операции

CRUD — акроним, обозначающий четыре базовые функции, используемые при работе с базами данных [1] : создание (англ. create ), чтение ( read ), модификация ( update ), удаление ( delete ). Введён Джеймсом Мартином (англ. James Martin ) в 1983 году [2] как стандартная классификация функций по манипуляции данными.

В SQL этим функциям операциям соответствуют операторы Insert (создание записей), Select (чтение записей), Update (редактирование записей), Delete (удаление записей). В некоторых CASE-средствах использовались специализированные CRUD-матрицы или CRUD-диаграммы, в которых для каждой сущности указывалось, какие базовые функции с этой сущностью выполняет тот или иной процесс или та или иная роль. В системах, реализующих доступ к базе данных через API в стиле REST, эти функции реализуются зачастую (но не обязательно) через HTTP-методы POST, GET, PUT и DELETE соответственно.

Хотя традиционно оперирование в стиле CRUD применяется к базам данных, такой подход может быть распространён на любые хранимые вычислительные сущности (файлы, структуры в памяти, объекты). Шаблон проектирования ActiveRecord обеспечивает соответствие функций CRUD объектно-ориентированному подходу, и широко используется в различных фреймворках для доступа к базам данных из объектно-ориентированных языков программирования.

CRUD Operations in SQL Server

By: Jeffrey Yao | Updated: 2020-07-19 | Comments (3) | Related: More > Database Design
Problem

I am a new SQL Server DBA, I heard of the CRUD acronym, but I do not quite understand the meaning and importance of these CRUD operations, can you please give a detailed explanation?

Solution

CRUD is the basic operations in any RDBMS, and this tip will take a detailed look at the CRUD operations in SQL Server.

What is CRUD?

CRUD means Create, Read, Update, Delete, and it can mean different things in different systems, but for SQL Server, it is commonly considered to map to the following SQL operations on table records.

CRUD SQL
C — Create Insert
R — Read Select
U — Update Update
D — Delete Delete

According to Wikipedia, this acronym may be first coined by James Martin in his 1983 book Managing the Data-base Environment.

Importance of CRUD

CRUD operations in RDBMS are the basic operation units, built upon which is a very rich ecosystem, such as security control, object permission/access, locking mechanism, performance optimization, transaction control, resource control, etc.

There are a few obvious benefits here:


  1. Facilitate operation security control: in the real world, for the same data, some people can read it but not change it, like your salary, which you can read it but you cannot update/delete it (at least without authorization). Some can only read/write their own data, but no access to other’s data. With CRUD operation concepts, we can satisfy all these various granular access requirements by imposing the right mix of permissions on CRUD operations.
  2. Facilitate granularity of business design: when we design a business application, we often consider business objects as the building blocks (like in OOP design), such as in a banking application, we have CUSTOMER, ACCOUNT, and other objects like RATE, PRODUCT, etc. For each of these objects, we can apply CRUD operations on them (in OOP, these objects will have CRUD methods), and these make the application design simpler and more scalable.
  3. Facilitate the trouble-shooting process: to better understand this benefit, we can use an opposite example. SQL Server has introduced the MERGE statement with SQL Server 2008, this Merge statement is a powerful function, it kind of blends insert, update, delete together in one unit. However, whenever I debug a script with such MERGE statement, I have to open another SSMS window to check the target and source tables based on the merge search condition and calculate the expected result and then compare with the MERGE execution result. Yes, the MERGE statement is concise but in a troubleshooting process, the debug time with a MERGE statement is longer as well.

Examples of CRUD

We will list a few simple CRUD examples here. First, we will create a simple table as follows:

C for Create (Insert)

There can be many different syntax forms for an insert, but most common ones are the following four forms:

In method 4, we assume we have an existing file c:\tem\a.csv and the file is as follows:

When we do a select on table dbo.Product, we will see the table are populated correctly as shown below:

R for Read (SELECT)

In SQL Server, to read data, there are literally two forms, one is data set read and another is data row read. The data set read is via SELECT and data set read can read multiple rows at one time like the following.

The data row read exists in cursor read via FETCH, and the following is an example.

U for Update

Update is very straight-forward in SQL Server, and its most common form is as follows.

D for Delete

Delete data from a table in SQL Server can be literally two forms, one is the regular DELETE statement and another is TRUNCATE TABLE. There are lots of articles discussing about the difference between DELETE and TRUNCATE.

Here are two examples

In SQL Server 2008, there is a MERGE statement which can achieve the functions of CUD (no R). I purposely omit it here as it is not available across all SQL Server versions and also it is impossible to classify it to C or U or D.

Extending CRUD Concept

CRUD in essence seems to be DML (data manipulation language), but this concept can be extended to DDL (Data Definition Language). For example, if we consider a database as a container, we can CRUD lots of database objects, such as table, view, stored procedure and user, etc. Let’s use a table as an object, we can see the following CRUD actions: