Основные различия между ними касаются структуры данных, модели управления данными, масштабируемости, и подходов к транзакциям.
MySQL использует фиксированную схему, что означает, что структура таблиц (колонки, типы данных) должна быть определена заранее и изменения могут быть сложными. Данные хранятся в таблицах с фиксированным набором столбцов.
MySQL использует SQL для определения, манипуляции и управления данными. Поддерживает ACID (Atomicity, Consistency, Isolation, Durability) свойства, что обеспечивает надежные и согласованные транзакции.
Легче масштабировать вертикально (увеличение мощности одного сервера), но горизонтальная масштабируемость (распределение на несколько серверов) сложнее и требует дополнительных усилий (например, шардинг).
Хорошо подходит для приложений с четко определенными структурами данных, такими как CRM, ERP системы, финансовые приложения и системы управления содержимым (CMS).
NoSQL базы данных поддерживают гибкие и динамические схемы данных, что позволяет легко изменять структуру данных без необходимости изменения схемы. Поддерживают различные модели данных, включая документные, ключ-значение, графовые и колонковые базы данных.
Используют разные способы доступа и управления данными, которые не требуют использования SQL. NoSQL базы данных часто следуют принципу CAP-теоремы (Consistency, Availability, Partition tolerance), делая акцент на доступности и устойчивости к разделению, иногда жертвуя строгой консистентностью.
Легко масштабируются горизонтально, распределяя данные и нагрузку на несколько серверов, что позволяет эффективно работать с большими объемами данных и высокой нагрузкой.
Подходят для приложений, работающих с большими объемами данных и требующих высокой скорости обработки, таких как социальные сети, интернет-магазины, системы аналитики, IoT приложения.
MySQL: Фиксированная схема, данные хранятся в таблицах.
NoSQL: Гибкая схема, данные могут храниться в документах, ключ-значение, графах или столбцах.
MySQL: SQL для запросов и управления данными.
NoSQL: Различные модели данных и запросов, не обязательно SQL.
MySQL: Поддерживает ACID транзакции.
NoSQL: Поддержка транзакций варьируется, часто следуют CAP-теореме, обеспечивая доступность и устойчивость к разделению.
MySQL: Для вертикальной масштабируемости.
NoSQL: Для горизонтальной масштабируемости.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Каждая запись в одной таблице связана с одной и только одной записью в другой таблице.
Пользователь (User) и Паспорт (Passport)
Каждому пользователю соответствует один уникальный паспорт. В реляционных базах данных можно реализовать эту связь с помощью уникального внешнего ключа.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE passports (
id SERIAL PRIMARY KEY,
user_id INTEGER UNIQUE,
passport_number VARCHAR(50),
FOREIGN KEY (user_id) REFERENCES users(id)
);
Каждая запись в одной таблице может быть связана с несколькими записями в другой таблице, но каждая запись в другой таблице связана только с одной записью в первой таблице.
Пользователь (User) и Заказы (Orders)
Один пользователь может сделать много заказов, но каждый заказ связан с одним пользователем. Эта связь обычно реализуется с помощью внешнего ключа.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INTEGER,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id)
);
Каждая запись в одной таблице может быть связана с множеством записей в другой таблице, и наоборот.
Студенты (Students) и Курсы (Courses)
Один студент может записаться на множество курсов, и каждый курс может быть записан многими студентами. Эта связь обычно реализуется с помощью промежуточной таблицы (таблицы связи), которая содержит внешние ключи обеих связанных таблиц.
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE courses (
id SERIAL PRIMARY KEY,
course_name VARCHAR(100)
);
CREATE TABLE student_courses (
student_id INTEGER,
course_id INTEGER,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
В нереляционных базах данных связи могут быть организованы иначе, поскольку они часто не поддерживают традиционные реляционные модели.
Вложенные документы
Например, в MongoDB документы могут включать вложенные документы или массивы, что позволяет моделировать отношения "один ко многим" и "многие ко многим" внутри одного документа.
{
"_id": 1,
"name": "John",
"orders": [
{ "order_id": 1, "order_date": "2023-08-01" },
{ "order_id": 2, "order_date": "2023-08-05" }
]
}Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Это вариации стандарта SQL, используемые различными системами управления базами данных (СУБД). Хотя основа SQL является стандартизированной и поддерживается всеми СУБД, каждая из них может добавлять свои расширения и специфические особенности. Эти уникальные элементы и образуют диалекты SQL.
Разные СУБД могут иметь оптимизации, которые лучше работают с их архитектурой, что приводит к созданию специфических синтаксических конструкций.
Включение дополнительных функций, которые не охватываются стандартом SQL, для удовлетворения специфических потребностей пользователей.
Некоторые диалекты развивались на основе ранних версий SQL, и их отличия сохранились в современных реализациях.
Поддержка специфичных функций, таких как
LIMIT для ограничения числа возвращаемых строк, функции работы с датой и временем, специфичные для MySQL.SELECT * FROM users LIMIT 10;
Расширенная поддержка типов данных, таких как JSON и массивы, поддержка оконных функций, богатый набор встроенных функций.
SELECT * FROM users WHERE age > 30 ORDER BY name OFFSET 10 LIMIT 10;
Сложные типы данных, PL/SQL для написания хранимых процедур и триггеров, поддержка соединений
CONNECT BY для работы с иерархическими данными.SELECT * FROM users WHERE ROWNUM <= 10;
Поддержка
TOP для ограничения числа возвращаемых строк, встроенный язык T-SQL для написания процедур и триггеров, специфичные функции для работы с датой и временем.SELECT TOP 10 * FROM users;
Легковесная база данных, встраиваемая в приложения, поддержка ограниченного набора функций SQL, отсутствие полноценной поддержки некоторых функций, таких как внешние ключи до версии 3.6.19.
SELECT * FROM users LIMIT 10 OFFSET 0;
Не все SQL-запросы могут быть совместимы между различными СУБД из-за различий в синтаксисе и поддерживаемых функциях.
При переносе базы данных с одной СУБД на другую может потребоваться переписывание запросов и процедур для обеспечения совместимости.
Каждая СУБД предоставляет документацию по своим диалектам SQL, где описаны специфичные функции и их использование.
MySQL и PostgreSQL
SELECT * FROM users LIMIT 10 OFFSET 20;
SQL Server
SELECT * FROM users ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
Oracle
SELECT * FROM (
SELECT u.*, ROWNUM rnum
FROM (SELECT * FROM users ORDER BY name) u
WHERE ROWNUM <= 30
)
WHERE rnum > 20;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Это две разные системы управления базами данных (СУБД), каждая из которых имеет свои уникальные особенности, применения и случаи использования.
SQLite
Встраиваемая СУБД: SQLite - это библиотека, которая встраивается непосредственно в приложение. Она не требует отдельного сервера для работы.
Без сервера: Работает без необходимости запуска серверного процесса, что упрощает установку и настройку.
Файловая система: Все данные хранятся в одном файле базы данных на диске.
SQL Server Express
Серверная СУБД: SQL Server Express - это урезанная версия Microsoft SQL Server, требующая установки и запуска серверного процесса.
Клиент-серверная архитектура: Клиенты подключаются к серверу базы данных через сеть.
Разделенные файлы данных и логов: Данные и логи хранятся в отдельных файлах.
SQLite
Легковесная и быстрая: Подходит для приложений с небольшими или средними объемами данных и низкими требованиями к многопользовательскому доступу.
Ограниченная многопользовательская поддержка: Поддерживает ограниченное количество одновременных пользователей, так как блокировки осуществляются на уровне файла.
SQL Server Express
Масштабируемость: Подходит для приложений с высокими требованиями к производительности и поддерживает значительное количество одновременных пользователей.
Многопользовательская поддержка: Обеспечивает управление многопользовательским доступом и параллельностью транзакций.
SQLite:
Основные возможности SQL: Поддерживает основные команды SQL, такие как SELECT, INSERT, UPDATE, DELETE.
Ограниченные возможности: Отсутствие многих расширенных функций, таких как триггеры, хранимые процедуры, сложные типы данных и транзакции с несколькими заявлениями.
SQL Server Express:
Расширенные возможности: Поддержка триггеров, хранимых процедур, полнотекстового поиска, транзакций и других продвинутых функций.
Ограничения по сравнению с полной версией: SQL Server Express имеет ограничения по объему базы данных (до 10 ГБ на одну базу данных) и по использованию ресурсов (до 1 ГБ ОЗУ и 1 процессор).
SQLite:
Простота установки: Не требует установки, просто включается как библиотека в приложение.
Легкость развертывания: Так как данные хранятся в одном файле, перемещение базы данных сводится к копированию этого файла.
SQL Server Express:
Требует установки: Необходимо установить серверную часть, что может включать несколько шагов настройки.
Администрирование: Требует определенного уровня администрирования для настройки безопасности, резервного копирования и восстановления данных.
SQLite:
Мобильные приложения: Часто используется в мобильных приложениях (например, Android и iOS) для локального хранения данных.
Встроенные системы: Подходит для встроенных систем и IoT устройств.
Прототипирование и тестирование: Удобен для быстрого создания прототипов и тестирования.
SQL Server Express:
Веб-приложения: Хорошо подходит для небольших веб-приложений и сервисов, особенно на платформе Windows.
Настольные приложения: Используется в настольных приложениях, требующих мощной базы данных.
Учебные цели: Часто используется в образовательных целях для обучения работе с SQL Server.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
Это стандартный протокол для веб-серверов, который позволяет запускать внешние программы (скрипты) для генерации веб-страниц динамически. CGI скрипты могут быть написаны на различных языках программирования, таких как Perl, Python, PHP, C и других. Когда веб-сервер получает запрос на страницу, обрабатываемую CGI, он запускает соответствующий скрипт и передает ему данные запроса.
CGI прост в реализации и не требует сложной настройки. Поддерживает множество языков программирования, что делает его универсальным решением.
CGI является стандартом и поддерживается практически всеми веб-серверами.
Каждый запрос запускает новый процесс, что обеспечивает изоляцию запросов и повышает безопасность.
Каждый запрос создает новый процесс, что может быть ресурсоемким и замедлять работу сервера при большом количестве запросов. Создание и завершение процессов занимает время, что увеличивает задержку ответа.
Плохая производительность при высоких нагрузках делает CGI плохо подходящим для масштабируемых веб-приложений. Ограниченная возможность использования пула процессов для повышения эффективности.
Сложнее интегрироваться с современными технологиями и фреймворками. Отсутствие встроенных средств для работы с сессиями, аутентификацией и другими функциями современных веб-приложений.
Улучшенная версия CGI, которая повторно использует процессы для обработки нескольких запросов, что повышает производительность.
Языки и фреймворки, такие как PHP, ASP.NET, Node.js, Django, Ruby on Rails, которые интегрируются непосредственно с веб-серверами и обеспечивают высокую производительность.
Стандартный интерфейс для Python-приложений, позволяющий эффективную обработку запросов.
Серверы приложений, такие как Apache Tomcat, JBoss, которые предоставляют контейнеры для выполнения веб-приложений и управления ими.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Передача данных через HTTPS (SSL/TLS) обеспечивает шифрование данных между клиентом и сервером, что предотвращает их перехват и чтение третьими лицами. Настройте ваш веб-сервер для использования HTTPS, получив и установив SSL/TLS сертификат.
Куки передаются только по HTTPS-соединениям. Добавьте флаг Secure при установке куки.
Set-Cookie: sessionId=abc123; Secure
Куки недоступны через JavaScript, что предотвращает их кражу с помощью XSS (Cross-Site Scripting) атак. Добавьте флаг HttpOnly при установке куки.
Set-Cookie: sessionId=abc123; HttpOnly
Предотвращает отправку куки на другие сайты, что защищает от CSRF (Cross-Site Request Forgery) атак. Добавьте флаг SameSite при установке куки. Варианты включают
Strict, Lax, и None.Set-Cookie: sessionId=abc123; SameSite=Strict
Делает данные бесполезными для злоумышленников, даже если они смогут украсть куки. Используйте серверные библиотеки для шифрования и дешифрования данных в куки перед отправкой и после получения.
С помощью HMAC (Hash-based Message Authentication Code) позволяет проверить целостность и подлинность данных в куки. Используйте секретный ключ для генерации HMAC подписи и добавьте её к куки.
import hmac
import hashlib
secret_key = b'secret'
cookie_value = b'sessionId=abc123'
signature = hmac.new(secret_key, cookie_value, hashlib.sha256).hexdigest()
cookie = f'{cookie_value.decode()}; Signature={signature}'
Могут использоваться для кражи куки. Включает в себя валидацию и фильтрацию пользовательских вводов, использование Content Security Policy (CSP) и безопасное кодирование данных. Внедрите валидацию и фильтрацию вводов на стороне сервера, настройте CSP заголовки.
Content-Security-Policy: script-src 'self'
Значений куки и установка короткого срока действия уменьшает временное окно для атакующих. Устанавливайте короткий срок действия и обновляйте значение куки при каждой сессии.
Set-Cookie: sessionId=abc123; Max-Age=3600 # 1 час
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍1
Аутентификация — это процесс проверки личности пользователя, чтобы убедиться, что он тот, за кого себя выдает (например, ввод логина и пароля). Авторизация — это процесс предоставления прав доступа к ресурсам после успешной аутентификации, определяющий, что пользователь может или не может делать в системе (например, доступ к определенным файлам или функциям).
Она подтверждает, что пользователь является тем, за кого он себя выдает.
Убедиться, что пользователь действительно тот, кем он себя называет.
Пароли: Пользователь вводит пароль, который проверяется на соответствие сохраненному в системе.
Биометрические данные: Отпечатки пальцев, распознавание лица, голосовая идентификация.
Токены: Аппаратные устройства или программные токены, генерирующие одноразовые коды.
Сертификаты: Использование цифровых сертификатов для проверки подлинности.
Многофакторная аутентификация (MFA): Комбинация нескольких методов (например, пароль + одноразовый код).
Вход в систему с помощью имени пользователя и пароля.
Она контролирует доступ к ресурсам и действиям на основе уровня доступа пользователя.
Определить, какие действия пользователю разрешено выполнять и к каким ресурсам он имеет доступ.
Ролевое управление доступом (RBAC): Назначение ролей пользователям, каждая из которых имеет определенные права доступа.
Управление доступом на основе атрибутов (ABAC): Использование атрибутов (например, время дня, местоположение) для определения прав доступа.
Списки контроля доступа (ACL): Определение конкретных прав доступа для каждого ресурса и пользователя.
После входа в систему (аутентификации) пользователь может иметь доступ только к определенным разделам или функциям приложения, в зависимости от его роли (авторизация).
Аутентификация: Подтвердить личность пользователя.
Авторизация: Определить, к каким ресурсам и действиям пользователь имеет доступ.
Аутентификация: Первым шагом перед предоставлением доступа к системе.
Авторизация: После аутентификации, для контроля доступа к ресурсам и действиям.
Аутентификация: Кто вы?
Авторизация: Что вам разрешено делать?
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Это уязвимость веб-приложений, при которой злоумышленник может внедрить вредоносный код (обычно JavaScript) в веб-страницу, которую видят другие пользователи. Этот код выполняется в браузере жертвы и может использоваться для кражи данных, захвата сессий, подделки действий пользователя и других атак.
Злоумышленник отправляет вредоносный код как часть запроса (например, через URL или форму). Код выполняется, когда жертва открывает специально сформированную ссылку. Если злоумышленник отправит URL
https://example.com/search?query=<script>alert('XSS')</script>, то этот скрипт выполнится при загрузке страницы.<input type="text" name="query" value="<?php echo $_GET['query']; ?>">
Вредоносный код сохраняется на сервере и отображается для других пользователей. Обычно это происходит в комментариях, сообщениях или профилях пользователей. Пользователь вводит в комментарий
<script>alert('XSS')</script>. Когда другой пользователь просматривает страницу с этим комментарием, скрипт выполняется.Вредоносный код изменяет DOM-модель страницы на стороне клиента, без взаимодействия с сервером. Обычно это происходит из-за небезопасного манипулирования DOM через JavaScript. Если злоумышленник изменит URL на
https://example.com/#<script>alert('XSS')</script>, скрипт выполнится при загрузке страницы.var query = window.location.hash.substring(1);
document.write(query);
Всегда экранируйте данные перед их выводом в HTML, JavaScript, CSS и атрибуты. Это предотвращает выполнение вредоносного кода.
echo htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
Проверяйте и фильтруйте все входные данные. Очищайте данные от потенциально опасных символов и конструкций.
function sanitizeInput(input) {
var element = document.createElement('div');
element.innerText = input;
return element.innerHTML;
} CSP ограничивает выполнение непроверенного кода и позволяет задавать правила для источников контента. Это помогает предотвратить выполнение вредоносных скриптов.
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-random123';
Устанавливайте HttpOnly флаг для куки, чтобы сделать их недоступными через JavaScript, и Secure флаг, чтобы куки передавались только по HTTPS.
setcookie("session", $sessionId, [
'httponly' => true,
'secure' => true,
'samesite' => 'Strict'
]); Используйте инструменты и сервисы для регулярного сканирования вашего приложения на наличие уязвимостей, включая XSS.
Эти методы позволяют напрямую вставлять HTML в DOM, что может быть небезопасно. Используйте безопасные альтернативы, такие как
textContent или манипуляции с DOM.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
- Порождающие: Factory, Abstract Factory, Singleton, Builder, Prototype.
- Структурные: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.
- Поведенческие: Observer, Strategy, Command, State, Visitor, Mediator, Iterator, Interpreter.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Это подход к разработке программного обеспечения, при котором приложение разбивается на независимые, взаимосвязанные части, называемые модулями. Каждый модуль отвечает за выполнение определенной функции или набора функций, что делает программу более структурированной, управляемой и легко поддерживаемой.
Каждый модуль скрывает свою внутреннюю реализацию и предоставляет четко определенный интерфейс для взаимодействия с другими модулями. Это уменьшает зависимость между модулями и улучшает устойчивость к изменениям.
Принцип единственной ответственности применяется к модулям, что означает, что каждый модуль отвечает за выполнение одной конкретной задачи или группы тесно связанных задач.
Модули могут быть повторно использованы в других частях программы или в других проектах, что уменьшает дублирование кода и облегчает его поддержку.
Разделение программы на модули облегчает управление проектом и его масштабирование. Изменения в одном модуле обычно не требуют изменений в других модулях, что ускоряет разработку и тестирование.
Так как модули изолированы друг от друга, их можно тестировать и отлаживать независимо. Это облегчает нахождение и исправление ошибок.
Разделение кода на небольшие, управляемые части улучшает его структуру и упрощает понимание и поддержку.
Разные команды могут работать над разными модулями параллельно, что ускоряет процесс разработки.
Изменения в одном модуле не оказывают значительного влияния на другие модули, что облегчает внедрение новых функций и улучшений.
Модули могут быть оформлены как библиотеки функций, которые предоставляют определенные функциональные возможности, например, работа с файлами, обработка строк или взаимодействие с базами данных.
В объектно-ориентированном программировании классы и объекты можно рассматривать как модули, инкапсулирующие данные и методы.
Многие языки программирования поддерживают концепцию модулей и пакетов, например, модули в Python, пакеты в Java и модули в ECMAScript (JavaScript).
На Python
# file: math_operations.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
# file: main.py
import math_operations
x = 10
y = 5
print("Addition:", math_operations.add(x, y))
print("Subtraction:", math_operations.subtract(x, y))
На JavaScript
// file: mathOperations.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
// file: main.js
import { add, subtract } from './mathOperations.js';
const x = 10;
const y = 5;
console.log('Addition:', add(x, y));
console.log('Subtraction:', subtract(x, y));
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Она предполагает скрытие внутренней реализации объекта и предоставление доступа к ней только через строго определенные методы.
От внешнего мира, доступ к этим данным осуществляется только через методы (функции), которые предоставляются объектом.
Определение уровня доступа к компонентам объекта. Часто используются модификаторы доступа:
Private: Поля и методы доступны только внутри самого класса.
Protected: Поля и методы доступны внутри класса и подклассов.
Public: Поля и методы доступны из любого места программы.
Определяют набор методов, которые объект обязан реализовать, скрывая при этом реализацию этих методов.
Доступны только через методы доступа (геттеры и сеттеры), которые могут содержать дополнительную логику проверки, валидации или преобразования данных.
Скрытие данных уменьшает риск их случайного или злонамеренного изменения извне.
Инкапсуляция позволяет разделить сложную систему на более управляемые части, облегчая понимание и поддержку кода.
Изменения в реализации класса могут быть сделаны без изменения кода, использующего этот класс, что упрощает расширение функциональности.
Инкапсулированные компоненты могут быть легко повторно использованы в других частях программы или в других проектах.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1