Рубрики
Без рубрики

Фауна и FQL для пользователей Firestore

Фауна и Firestore – очень похожие базы данных, предлагая мгновенную масштабируемость и довольно просту … Tagged с JavaScript, Firebase, Database, WebDev.

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

Фон

Firestore является базой данных, созданной Google в 2017 году. Это преемник двух предыдущих баз данных, DB Firebase Realtime DB и Cloud Datastore. Он сгруппирован в группе категорий Firebase, предлагая интеграцию с различными службами Firebase, хотя он также предлагается через Google Cloud. Основные точки продажи Firestore заключаются в том, что его просты в использовании, даже без сервера и обладают возможностями в реальном времени. Он также предлагает простые цены на основе чтения, хранения данных и записей.

Фауна является базой данных, разработанной в 2012 году несколькими бывшими инженерами-Twitter для решения проблем масштабируемости с существующими базами данных NOSQL. Фауна предлагает простой язык запросов под названием FQL, а также сервис GraphQL, если вы не хотите изучать другой язык запросов. Фауна также может использоваться легко без бэкэнда и сосредоточена на этом, оставаясь максимально масштабируемым. Firestore и Fauna имеют ряд аналогичных функций и несколько ключевых различий. Они оба абстрагируют над облачными машинами, чтобы обеспечить простой способ их использования и даже абстрактные репликации по пересечению региона. Они также предлагают клиентские SDK и возможности в реальном времени. Их языки запросов немного отличаются, так как у фауны есть более полная настройка, которая позволяет вам делать определенные вычисления в базе данных с помощью языка запросов. Это может увеличить скорость, уменьшая необходимость в запросах в оба конца. Язык запросов Firestore в основном состоит из функций CRUD. Другое ключевое отличие состоит в том, что фауна более гибкая с возможностями запроса и масштабируемости. Теперь, когда вы знаете фон каждой базы данных и то, как они различаются, давайте углубимся в более глубокие.

Сравнение

Язык запросов

Теперь, когда мы выделили несколько различий в языках запросов, давайте более внимательно посмотрим на эти различия. С Firestore есть два разных стиля запроса данных, цепочки функций и передачи данных через параметры. Перед обновлением V9 SDK Firestore в основном использовал цепочку функций. Например, базовый запрос чтения может выглядеть так:

const data = (await db.collection("cities").doc("SF").get()).data()

Приведенный выше пример обращается к основному объекту базы данных, затем сборы и документ, цепляя функции метода. Так все еще работает, если вы используете SDK на стороне сервера. Тем не менее, в более поздней версии веб-SDK на стороне клиента существует способ запросить, передавая варианты в качестве параметров.

const data = (await getDoc(doc(db, "collectionName", "documentName"))).data()

Фауна имеет только один универсальный SDK и один стиль запроса, который напоминает более мощную версию Firestore V9 SDK. Чтобы выполнить операции, вы гнездируете различные функции в других функциях. Например, чтобы прочитать документ, вы можете сделать это:

const data = (await db.query(
    q.Get(q.Ref(q.Collection('collectionName'), 'documentName'))
)).data

Каждая функция находится на именах. Q Анкет Есть гораздо больше, чем просто те, которые используются в этом примере. Для полного списка вы можете посмотреть на Шпаргалка фауны Анкет Фауна также предоставляет API GraphQL, как упоминалось ранее, но я не буду обдумывать это для краткости. Оба языка запросов довольно просты в использовании, и вы можете делать большинство вещей, которые вам нужны с обоими, хотя Fauna’s предлагает больше способов запуска вещей в базе данных, чтобы предотвратить обработки обработки.

Индексы

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

Транзакции и последовательность

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

Ценообразование

Цены на Firestore и Fauna в некоторых отношениях похожи, но очень разные в других. Они оба цены по чтениям, писаниям и хранилищу, хотя фауна также цены начитывают операции, которые выполняются на их серверах. Оба предлагают бесплатные уровни, так что вы можете попробовать либо ничего, ничего не заплатив. Стоимость затрат Firestore варьируется в зависимости от региона, который вы используете. Для типичной конфигурации отдельного региона Firestore стоит 0,36 долл. США за миллион документов, прочитанных, 1,08 долл. США за миллион, записанных на документы и 0,108 долл. США за гигабайт хранения. Для конфигурации с несколькими регионами Firestore стоит 0,6 долл. США за миллион документов, 1,80 долл. США за миллион, записанных на документы и 0,18 долл. США на гигабайт хранения. Поскольку фауна является глобальной по умолчанию, она имеет более последовательные цены, хотя фауна умножает все затраты на 1,2x, если вы храните все данные в Европе и 1,1x, если вы храните некоторые в Европе. Фауна стоит 0,45 долл. США за миллион документов, 2,25 долл. США за миллион, записанные на документы, 2,03 долл. США за миллион вычислительных операций и 0,23 долл. США на гигабайт хранения. Как вы можете видеть сверху, их расходы довольно близки. Фауна может быть более дорогой на уровне поверхности, но это всего лишь иногда дороже. Это потому, что Fauna предлагает такие функции, как встроенное сжатие и часто более дешевые запросы. В конечном счете, вам нужно будет провести больше исследований, основанных на ваших собственных потребностях, чтобы выяснить, что дешевле.

Ограничения

Обе базы данных имеют некоторые ограничения для пропускной способности и размера. Для Firestore есть несколько ограничений на документы. Одним из них является то, что документы должны быть 1 мегабайт или меньше, и не могут быть изменены более раз в секунду. Другим является то, что в базе данных может быть выполнено не более 10 000 операций записи в секунду, и эти операции записи не могут в совокупности содержать более 10 мегабайт данных. Кроме того, вложенные данные на картах документов имеют максимальную глубину 20, хотя вы можете обойти это, превратив их в строку JSON. Есть много других ограничений, показанных на их странице ограничений, но они наиболее актуальны для большинства людей. Фауна также имеет ограничения, хотя и меньше. Размеры документов ограничены в 8 мегабайтах, размеры транзакций ограничены в 16 мегабайтах, а индексные записи должны оставаться ниже 64 000 байт. Для получения дополнительной информации вы можете посмотреть на их страницу ограничений.

Сравнение заключение

Фауна и Firestore очень связаны во многих отношениях, но в других различаются. Оба просты в использовании, хотя фауна может быть более мощной. Если вы ранее использовали Firestore и заинтересованы в фауне, читайте дальше для вступления в FQL (язык запросов FAUNA), предназначенную для предыдущих пользователей Firestore.

Вступление в FQL от Firestore

Как вы видели в разделе «Язык запросов» сравнения, может быть немало различий между способом запроса двух базы данных, особенно если вы привыкли к использованию для функциональной фирменной SDK. К счастью, FQL довольно интуитивно понятен, поэтому у вас не должно быть особых проблем с изучением его. Основной запрос FQL – это просто db.query () ничего не прошло к этому. Чтобы делать вещи с помощью запросов, вы передаете разные функции функции запроса, например q. Получить или Q.Create , и чтобы передать правильную информацию этим операциям, например, какой документ вы гнездируете, такие как Q. Рефери а также Q.Collection Анкет Это может показаться многословным для кого -то, кто привык к тому, что привык к тому, чтобы просто бежать .получить () На документе, но это может быть более элегантным, и вы можете сделать больше.

Создание документов

Фауна предлагает функцию Q.Create Это позволяет создавать документы, такие как Firestore’s Добавить функция Вы просто передаете сбор и данные, и он вернет ссылку на новый документ, а также данные нового документа.

const result = await db.query(
    q.Create(
        q.Collection("collectionName"),
        {       
            data: {
                field: "fieldValue",
                fruit: "bananas"
            },     
        },
    )
)
// Get reference to result
console.log(result.ref)
// Get new result data
console.log(result.data)
The equivalent with Firestore would be
const result = await addDoc(collection(db, "collectionName"), {
    field: "fieldValue",
    fruit: "bananas"
});
// Get reference to result
console.log(result);

Это работает для создания документа без указания идентификатора, но вы также можете обновить существующий документ, используя Q.REF С коллекцией и идентификатором вместо Q.Collection Анкет

Получение документов

Это довольно просто для реализации, если вы просто получаете документ от идентификатора и имени коллекции.

const data = (await db.query(
    q.Get(q.Ref(q.Collection("collectionName"), "documentName"))
)).data
As you can see, there is a query function that contains a get query with a ref passed to it. This is equivalent to
const data = (await db.collection("collectionName").doc("documentName").get()).data()
or
const data = (await getDoc(doc(db, "collectionName", "documentName"))).data()

Настройка/обновление документов

Фауна предлагает два встроенных метода для этого, Q.Replace Для разрушительной замены и Q.Update Для обновления определенных полей без изменения всего документа. Это приравнивается к Firestore установлен и Обновление функции.

await db.query(
    q.Replace(
        q.Ref(q.Collection("collectionName"), "documentName"),
        {        
            data: {
                field: "fieldValue", fruit: "still bananas"
            }
        }
    )
)
await db.query(
    q.Update(
        q.Ref(q.Collection("collectionName"), "documentName"),
        {        
            data: {
                fruit: "still bananas"
            }
        }
    )
)

Это эквивалентно

// v8 web or Node
await db.collection("collectionName").doc("documentName").set({
    field: "fieldValue",
    fruit: "still bananas"
});
await db.collection("collectionName").doc("documentName").update({
    fruit: "still bananas"
});
// v9 web
await setDoc(doc(db, "collectionName", "documentName"), {
    field: "fieldValue",
    fruit: "still bananas"
});
await updateDoc(doc(db, "collectionName", "documentName"), {
    fruit: "still bananas"
});

В настоящее время, если вы хотите подражать поведению набора с Merge: True, который создает документ, если он еще не существует, вы можете использовать запуск запроса, который проверяет, существует ли документ, и создает его, если он не использует q. Если Анкет

Удаление документов

Удаление документа с фауной – это все равно, что получить документ, но с Q.Delete вместо Q. Получить Анкет

await client.query(
    q.Delete(q.Ref(q.Collection("collectionName"), "documentName"))
);
This equates to
// v8 web or node
await db.collection("collectionName").doc("documentName").delete()
// v9 web
await updateDoc(doc(db, "collectionName", "documentName"))

Вывод

Фауна – отличная альтернатива Firestore с более мощным API запроса и другими преимуществами. Они очень похожи на базы данных, и легко мигрировать в фауну из Firestore. Я надеюсь, что эта статья просветила вас о различиях между фауной и Firestore, а также о том, как код FQL переводится на код Firestore, и спасибо за чтение.

Оригинал: “https://dev.to/asyncbanana/fauna-and-fql-for-firestore-users-4ch3”