Vercel и Netlify облегчают разработчикам создание и отправку полнофункциональных бессерверных приложений. Обе платформы предоставляют такие возможности, как бессерверные пограничные функции, CDN (сеть доставки контента), инструменты сборки, аналитика и т. д. При создании полнофункциональных приложений на этих платформах у разработчиков есть довольно много вариантов для слоя данных (базы данных). В этой статье сравниваются базы данных, обычно используемые в Vercel и Netlify, чтобы вы могли принять обоснованное решение при выборе новой базы данных для своего проекта.
PlanetScale
PlanetScale — это простая в использовании MySQL-совместимая бессерверная база данных. MySQL легко запустить в работу. Однако по мере роста базы данных вам придется масштабировать экземпляры MySQL. Шардинг базы данных — это распространенная техника, которая используется для масштабирования MySQL.
Шардинг — это техника масштабирования, при которой таблицы базы данных разбиваются на разделы, и каждый раздел размещается на собственном сервере РСУБД. В случае с MySQL это означает, что каждый узел является собственной СУБД MySQL со своим набором разделов данных.
PlanetScale использует шардинг Vitess для масштабирования баз данных. Хотя Vitess облегчает администрирование шардов баз данных, PlanetScale на самом деле не делает шардинг баз данных автоматическим, так что это то, что необходимо разработать самостоятельно. Если вы хотите масштабировать свою базу данных распределенным образом — сейчас или в будущем — вам необходимо принять во внимание это ограничение.
Осколки могут быть сложными для правильного использования. Иногда приходится беспокоиться о разделении битов, что довольно сложно. Объединения между шардами не так просто выполнить. Если вам нужно межосколочное объединение, вам, вероятно, потребуется хранилище данных.
На данный момент PlanetScale предоставляет ограниченные функциональные возможности и сосредоточил свое ключевое отличие на уникальной функции ветвления для миграции схем. Однако некоторые основные функции базы данных, похоже, отсутствуют, например, поддержка ограничений внешнего ключа. У него также нет API GraphQL и возможностей потоковой передачи данных.
PlanetScale с архитектурой edge
Одним из основных преимуществ Vercel и Netlify является то, что они имеют бессерверную пограничную поддержку. Пограничное предложение позволяет вам держать ваши бессерверные функции ближе к вашим пользователям.
Например, предположим, у вас есть приложение Next.js, развернутое на Vercel. Пользователь из Испании пытается получить доступ к вашему приложению. Приложение будет обслуживаться из ближайшего к Испании местоположения. Vercel распространяет ваше приложение по всему миру, поэтому ваши пользователи не сталкиваются с дополнительной задержкой.
Однако если ваша база данных не распределена, то ваши граничные функции не будут столь же производительными. Например, если ваш сервер базы данных расположен в Ней-Йорке, США, а вычислительная функция находится в Лиссабоне, Португалия, это приведет к значительной задержке. В идеале вам нужна база данных, которая также распределена глобально, чтобы уменьшить задержку.
Чтобы узнать больше о производительности edge vs serverless и о том, какую роль играют базы данных в архитектуре, смотрите это видео.
Поскольку PlanetScale не является глобально распределенной, она может иметь некоторые недостатки в производительности. Однако PlanetScale предлагает несколько регионов, и вы можете вручную настроить свое приложение на получение данных из ближайшего региона.
Если вы создаете приложение, которому требуется очень низкая задержка и высокая согласованность данных в нескольких регионах, PlanetScale может оказаться не самым лучшим выбором.
Плюсы | Минусы |
---|---|
Совместимость с MySQL (легко для пользователей MySQL) | Не является распределенной базой данных |
Масштабируется горизонтально с помощью шардинга Vitess | Не выполняет шардинг автоматически |
Механизм ветвления | Нет ограничений по внешним ключам |
Реляционное моделирование данных | Нет API реального времени |
Нет поддержки GraphQL из коробки |
MongoDB (MongoDB Atlas)
Еще одним популярным выбором является MongoDB. MongoDB — это база данных NoSQL с необязательными схемами. MongoDB является гибкой и подходит как для структурированных, так и для неструктурированных данных. Mongo Atlas предоставляет управляемые экземпляры базы данных Mongo. Mongo сохраняет данные в формате JSON.
Оценить производительность двух разных систем баз данных очень сложно, поскольку обе системы подходят к задаче хранения и получения данных совершенно по-разному. MongoDB также оптимизирована для производительности записи. Благодаря своей документоориентированной природе и приоритету скорости над безопасностью транзакций, MongoDB обычно превосходит традиционные реляционные базы данных.
В отличие от реляционной базы данных, MongoDB не поддерживает соединения по внешнему ключу. Из-за этого моделирование отношений между данными в Mongo может оказаться сложным. В MongoDB есть другие способы обойти эту проблему. Просмотрите эту тему, чтобы узнать больше о моделировании данных в MongoDB.
Вы создаете индексы в MongoDB для эффективного выполнения запросов и доступа к данным. Без индексов вам придется выполнять сканирование коллекции в MongoDB. Если индексирование реализовано неправильно или имеет какие-либо несоответствия или другие ошибки, это негативно сказывается на скорости и производительности MongoDB.
MongoDB Atlas поддерживает GraphQL. Вы также можете использовать потоки изменений для реализации функциональности в реальном времени.
Одно из ограничений MongoDB заключается в том, что она не является транзакционной. Если вашему приложению требуются транзакционные данные, MongoDB может не подойти. Неправильное или сложное индексирование в сочетании с отсутствием структурированных отношений может привести к повреждению данных в MongoDB, если не соблюдать осторожность.
MongoDB Atlas с архитектурой edge
MongoDB Atlas предлагает бессерверные экземпляры MongoDB; однако они не являются распределенными. Между тем, управляемый сервис (provisioned) Atlas предлагает поддержку глобальной репликации ваших данных из коробки.
Если вы хотите использовать архитектуру edge в полной мере, вам придется реплицировать данные вручную и располагать серверы баз данных рядом с серверами edge. И снова это может быть непросто.
версия MongoDB Atlas также требует TCP/IP для соединения с пограничными функциями, что несовместимо с пограничными/бессерверными функциями, которые являются эфемерными по своей природе (поскольку вам придется поддерживать пулы соединений с MongoDB, даже когда функция не вызывается.
Если вашему приложению не требуется транзакционная база данных, встроенный механизм мультирегиональной репликации, и вам не нужна сложная РСУБД типа моделирования данных, то выбирайте MongoDB.
Плюсы | Минусы |
---|---|
Гибкие, простые в использовании выражения запросов | Необходимость управления пулом соединений |
Надежность и простота масштабирования | Издержки производительности при распределенных транзакциях |
Поддержка GraphQL через MongoDB Atlas | Mongo имеет жесткое ограничение в 16 МБ на документ |
Производительность выше, чем у любой реляционной базы данных | Atlas является (или может быть) глобально распределенной, но вам нужно управлять кластерами и ключами шардов |
Fauna
Fauna — это распределенная документарно-реляционная база данных, предоставляемая в виде облачного API. Fauna сочетает в себе лучшее из SQL и NoSQL. С Fauna вы получаете гибкость базы данных NoSQL и возможности реляционного моделирования данных базы данных SQL.
Fauna также обладает функциями, определяемыми пользователем (UDFs), которые позволяют выполнять вычисления на ваших данных и сократить путь к базе данных. Подробнее о UDF-функциях Fauna можно узнать здесь.
Кроме того, Fauna предоставляет вам встроенный GraphQL API для запросов к вашей базе данных. Вы получаете возможность определить свою базу данных как схему GraphQL. Вы можете обновлять и объединять схему GraphQL по мере развития данных вашего приложения, ничего не нарушая.
Вы также можете создавать приложения реального времени с помощью API потоков Fauna.
В своей основе Fauna использует собственный язык запросов FQL (Fauna Query Language).
Совет
Fauna изначально интегрирована с Vercel и Netlify.
Эти интеграции позволяют легко использовать Fauna в качестве базы данных для ваших сайтов и функций.
- Дополнение Fauna для Netlify
- Интеграция с Vercel
Fauna и граничные архитектуры
Fauna была создана для современных приложений. Она требует минимальной конфигурации и управления. Fauna является сильно согласованной, бессерверной и глобально распределенной. Поскольку Fauna является глобально распределенной, ваши данные автоматически реплицируются и размещаются ближе всего к вашим граничным серверам.
Fauna разработана для использования всех преимуществ пограничной архитектуры и гарантирует, что ваши пользователи получат данные из ближайшего местоположения. Доступ к Fauna осуществляется через HTTP-вызов, и в отличие от MongoDB и некоторых других баз данных NoSQL, она не зависит напрямую от базового протокола TCP/IP для подключения.
Если вам нужна гибкость и производительность NoSQL с надежностью, моделированием данных и сильной согласованностью SQL, то Fauna — подходящая база данных для вас.
Гибкое документально-реляционное моделирование данных в Fauna (поскольку она сочетает в себе лучшее из SQL и NoSQL) делает ее удобной для разработчиков. Разработчики также имеют возможность выбрать драйвер или GraphQL API для запросов к базе данных, что, в свою очередь, повышает продуктивность работы разработчиков.
Когда вы создаете на таких платформах, как Netlify или Vercel, вы сосредотачиваетесь на своем коде и быстром предоставлении функций, не думая о серверах, задержках или масштабировании; эти платформы обо всем позаботятся. Fauna следует той же философии. Вы запускаете свою базу данных, подключаете приложение, а все остальное (т.е. масштабирование, глобальное распределение данных, группы регионов, репликация) берет на себя Fauna.
Плюсы | Минусы |
---|---|
Документально-реляционная база данных (сочетает гибкость и производительность NoSQL с надежностью SQL). | Язык запросов Fauna является новым и требует некоторого времени для привыкания. |
Бессерверная и распределенная | |
Автоматическое масштабирование (оплата за использование) | |
Позволяет вычислять на данных с помощью UDFs | |
Сильная согласованность | |
Поддержка GraphQL | |
Поддержка API в реальном времени с потоками |
Заключительные слова
Такие платформы, как Vercel и Netlify, позволяют разработчикам быстро создавать приложения и решения, одновременно повышая удобство работы разработчиков. Эти платформы абстрагируются от управления сервером, масштабирования и инфраструктуры, чтобы вы и ваша команда разработчиков могли сосредоточиться на создании новых функций и написании кода. Уровень данных имеет решающее значение для разработки, запуска и масштабирования успешного продукта, так почему бы не выбрать базу данных, которая также построена в соответствии с философией бессерверной архитектуры? Вы можете подписаться на бесплатный экземпляр (кредитная карта не требуется) Fauna здесь и начать создавать уже сегодня. Надеюсь, эта статья поможет вам принять взвешенное решение о выборе базы данных при построении с помощью Vercel или Netlify.