Size: a a a

2019 July 31

S

Stanislav in Data Engineers
а сейчас в чем?
источник

R

Renarde in Data Engineers
сейчас delta+parquet (местами), но с ним очень медленно получается
источник

R

Renarde in Data Engineers
Ну то есть по сути, апдейты у нас прилетают по одному ключу и часто, а агрегации и запросы делаются по другому ключу в основном
источник

S

Stanislav in Data Engineers
большой поток апдейтов?
источник

S

Stanislav in Data Engineers
чбейз не так плох. по идее можно придумать выход из ситуации через связку клиент-заказ и композитный ключ
будет быстро на выборку и чуток непонятно как на вставку
источник

S

Stanislav in Data Engineers
у всех кв в твоем случае все равно надо думать над частью К
источник

S

Stanislav in Data Engineers
либо может какой-то тарантул спасет
но по нему мало экспертизы вокруг
источник

AZ

Anton Zadorozhniy in Data Engineers
Renarde
всем привет. я все еще мучаюсь с выбором хранилища под юзкейс.
Смысл такой - у нас есть несколько потоков событий:
- платежи
- заказы
- еще чего-нибудь
Они льются из кафки и читаются спарком.
Дальше их нужно положить в структуру по айдишнику клиента, и апдейтить если прилетают новые значения.
Пример структуры данных:

{
 “some_user_id”:
   payments: [
      {“payment_id”: 100, “payment_value”: 120}
   ],
   orders: [
      {“order_id”: 200, “order_item”: [“something”]}
   ]
}


Прилетающий апдейт может, например, обновить данные вот так:

{“order_id”:200, “order_item”: [“something”, ”something_else”]}



А вот реквестить эти данные снаружи уже будут с агрегацией до клиента, например как-то так:

select count(orders) from data where user_id=“some_user_id”


Получается что нужно kv-хранилище со вложенными индексами, причем хорошо масштабируемое (данных прибывает много, уже >>1TB и прирост около 0.5TB в год).
Я смотрю в сторону HBase, но кажется что у него с nested index все прямо не очень. Какое хранилище подойдет под такой кейс?
Вроде обсуждали Kafka и DynamoDB для этого, чем не подошли? И я не понял зачем нестед индекс нужен.. А ещё в твоём примере можно обновлять и хранить счётчик заказов прям в строке и доставать без агрегации
источник

R

Renarde in Data Engineers
Anton Zadorozhniy
Вроде обсуждали Kafka и DynamoDB для этого, чем не подошли? И я не понял зачем нестед индекс нужен.. А ещё в твоём примере можно обновлять и хранить счётчик заказов прям в строке и доставать без агрегации
В динаму не влезают записи - под одним ключом может быть до 16мб, а в динаме ограничение в 512кб(
источник

AZ

Anton Zadorozhniy in Data Engineers
Renarde
В динаму не влезают записи - под одним ключом может быть до 16мб, а в динаме ограничение в 512кб(
Так себе дизайн с такими значениями, может разбить запись под скан или нормализовать?
источник

AZ

Anton Zadorozhniy in Data Engineers
Ну или не КВ, чтобы апдейт записи на проводе не тащил все 16мб
источник

AZ

Anton Zadorozhniy in Data Engineers
Хбейз тоже придётся растаскивать по разным целлам и семействам колонок, он не может такие большие значения
источник

RI

Rustam Iksanov in Data Engineers
А если phoenix поверх hbase? Плюсом идут вторичные индексы и jdbc
источник

S

Stanislav in Data Engineers
Renarde
В динаму не влезают записи - под одним ключом может быть до 16мб, а в динаме ограничение в 512кб(
Жесть.  А пожать никак?
источник

AZ

Anton Zadorozhniy in Data Engineers
надо все access paths нарисовать и понять какие доступы нужны, с такими значениями мб вариант с UDF на стороне сервера, когда на проводе только измененные значения, но там масса ограничений (если апдейт зависит от предыдущего значения)
источник

R

Renarde in Data Engineers
Rustam Iksanov
А если phoenix поверх hbase? Плюсом идут вторичные индексы и jdbc
Вот этот вариант мы рассматриваем - а там можно вложенные структуры иметь?
источник

RI

Rustam Iksanov in Data Engineers
Renarde
Вот этот вариант мы рассматриваем - а там можно вложенные структуры иметь?
Что подразумевается под вложенными? phoenix это sql уровень над hbase.
источник

R

Renarde in Data Engineers
Anton Zadorozhniy
Так себе дизайн с такими значениями, может разбить запись под скан или нормализовать?
Фишка в том что атомарный апдейт (скажем один заказ - не будет весить 16мб), но внутри одного клиента мы можем иметь очень много заказов, и тогда они сильно больше будут
А выполнять джойн клиенты-на-заказы каждый раз не хочется
источник

AZ

Anton Zadorozhniy in Data Engineers
Renarde
Вот этот вариант мы рассматриваем - а там можно вложенные структуры иметь?
Там есть array, но вам наверное проще нормализовать
источник

RI

Rustam Iksanov in Data Engineers
Инженеры, как я понимаю, единственное феникс не может нормально кастить числовые типы с hbase.  И для того, чтобы типы там работали,нужно писать все через феникс?
источник