Какая разница в обновлениях между снежинкой и роксетом. Обновления происходят партиями? - PullRequest
0 голосов
/ 20 мая 2019

Насколько эффективно обновление отдельных строк в снежинке.Можем ли мы использовать снежинку в качестве транзакционной БД?

1 Ответ

0 голосов
/ 20 мая 2019

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

Многие снежные кластеры используют центральную базу данных FoundationDB для хранения метаданных обо всех этих кластерах для вашей организации. Кластер метаданных поддерживает сопоставление имени таблицы с набором файлов S3 в таблице. Каждый файл S3 содержит несколько тысяч записей и обычно занимает много мегабайт (например, 64-100 МБ). Данные в файлах S3 столбчатые сжатые. Преимущество сжатия столбцов заключается в меньшем размере файла, что обеспечивает эффективную и быструю передачу данных между S3 и службой снежинок. Недостатком является то, что обновление существующей записи не может быть выполнено на месте, поскольку невозможно обновить данные, сжатые по столбцам. в файле S3. Snowflake использует схему копирования при записи файлов S3 для поддержки обновлений. Объясним это, используя сценарий двух скоплений снежинок A и B.

Когда в кластере А происходит обновление для отдельной записи таблицы, программное обеспечение снежинки считывает резервный файл S3, обновляет его в памяти и затем сбрасывает весь файл размером 64 МБ в новый объект S3 (по существу, копирование на написать для всего файла S3). Затем он обновляет FoundationDB новыми метаданными. Кластер B получает информацию об этом обновлении через FoundationDB, перечитывает новый объект S3 и начинает обслуживать новые данные. Запись будет отображаться в кластере B в течение нескольких секунд.

К настоящему времени для вас должно быть очевидным, что проблема вышеуказанной системы заключается в объеме перезаписываемых данных. Обновления распространяются из одного кластера в другой посредством записи / чтения всего объекта S3 для каждого отдельного обновления (копирование при записи для каждого файла S3, а не для отдельных записей). Это означает, что если вы обновите 100-байтовую запись, это приведет к тому, что кластер B будет считывать 64 МБ данных из S3 (при условии, что объекты S3 имеют 64 МБ).

Так что, если ваши обновления меньше, чем несколько в секунду, то снежинка будет работать нормально. Или, если вы пакетируете все свои обновления в течение 5-10 минут, а затем вставляете их в снежинку с помощью одного обновления, это будет прекрасно работать. Но любая более высокая частота обновления может вызвать проблемы.

С другой стороны, Rockset использует изменяемое хранилище значений ключей под названием RocksDB-Cloud Rockset уничтожает одну запись в набор значений ключей и вставляет каждое из этих значений ключей в RocksDB-Cloud , RocksDB-Cloud является облачной версией RocksDB и использует дерево LSM , оптимизированное для быстрого обновления, что означает, что отдельные записи могут обновляться без необходимости выполнять копирование при записи для всех файлов S3. Коллекция Rockset может поддерживать несколько тысяч перезаписей в секунду. См. Раздел «Случайные записи» в тесте производительности RocksDB .

...