Size: a a a

2019 March 01

NP

Nicolae Paraschiva in pro.elixir
Źmićer Rubinštejn
Я просто понять пытаюсь, нафига так делать )
вроде ответом nda я не нарушу:
генерю сиды на основе данных
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Дамп не катит?)
источник

NP

Nicolae Paraschiva in pro.elixir
не, там другие юзкейсы
источник

FM

Fey Martynov in pro.elixir
мб не стоит в этом случае использовать ассоциации, а заджоинить всё что нужно в запрос и его стримить?
источник

NP

Nicolae Paraschiva in pro.elixir
возможно
источник

NK

ID:382338188 in pro.elixir
только еще стоит учитывать что Flow не работает, с ектовским стримом. Решается всё самописным Stream.recource
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Можно сделать цикл с постоянно увеличивающимся оффсетом
источник

NK

ID:382338188 in pro.elixir
и если не ошибаюсь ещё repo.stream еще и в транзакцию нужно пихать
источник

NP

Nicolae Paraschiva in pro.elixir
ID:382338188
и если не ошибаюсь ещё repo.stream еще и в транзакцию нужно пихать
так и делаю
источник

FM

Fey Martynov in pro.elixir
Źmićer Rubinštejn
Можно сделать цикл с постоянно увеличивающимся оффсетом
лучше курсор
источник

NK

ID:382338188 in pro.elixir
Nicolae Paraschiva
так и делаю
def all_stream(query, opts \\ []) do
       chunk_size  = Keyword.get(opts, :chunk_size, 500)
       offset      = Keyword.get(opts, :offset, 0)

       Stream.resource(
         fn -> {query, offset} end,

         fn {query, last_id} ->
           list = query
             |> where([e], field(e, ^@all_stream_pk_id) > ^last_id)
             |> limit(^chunk_size)
             |> order_by([e], asc: field(e, ^@all_stream_pk_id))
             |> all

           case List.last(list) do
             %{@all_stream_pk_id => id}  -> {[list], {query, id}}
             nil                         -> {:halt, {query, last_id}}
           end
         end,

         fn _ -> [] end
       )
     end
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Fey Martynov
лучше курсор
Это ещё вопрос. На офсетах можно распараллелить, плюс в случае ошибки отловить и повторить
источник

NK

ID:382338188 in pro.elixir
Nicolae Paraschiva
так и делаю
ну @all_stream_pk_id убери там под себя
источник

FM

Fey Martynov in pro.elixir
Źmićer Rubinštejn
Это ещё вопрос. На офсетах можно распараллелить, плюс в случае ошибки отловить и повторить
а у оффсета O(n)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Хотя распараллелится или нет - я не уверен
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Может там на чтение тоже лочит
источник

NK

ID:382338188 in pro.elixir
Źmićer Rubinštejn
Хотя распараллелится или нет - я не уверен
разпаралелится)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Fey Martynov
а у оффсета O(n)
А при генерации сидов время вообще не важно. Это не бизнесс процесс
источник

FM

Fey Martynov in pro.elixir
тогда и параллелить не нужно
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Fey Martynov
тогда и параллелить не нужно
Ну как бы да, но типа почему бы и нет?)
источник