185 похожих чатов

Как можно пачкой сохранить оооочень много структур в бд? Пробовал

через фор ин, но нагрузка 80% и память сильно забивает

16 ответов

20 просмотров

bulk insert

Dmytro- Автор вопроса
Andrey Burov
bulk insert

Потребление с ним ещё больше, и вообще не похоже что он что что добавляет

Если во флуенте не батч, а последовательные инсерты, то будет быстрее конечно.

Dmytro- Автор вопроса
iMike
Если во флуенте не батч, а последовательные инсерт...

Не уверен что там батч или по одному. Метод у флюента есть для именно добавление массива, но не знаю как он работает А что по памяти? 400к структур. Думаю разбить в куски по 20к

Dmytro- Автор вопроса
iMike
screenshot

Можно в SwiftQL сделать ModelAuthenticatable?

Dmytro
Можно в SwiftQL сделать ModelAuthenticatable?

Давай сначала разберемся с либками 🙂 SwifQL это всего лишь либка которая делает SQL из выражений написанных на Swift, то есть она даже не умеет коннектиться к БД, она только выплевывает SQL-строку которую потом нужно выполнить через какой-либо БД-драйвер. postgres-nio это драйвер для БД который к ней коннектится и через него можно выполнять SQL выражения и получать резаультаты, но в чистом виде он довольно не легок в использовании, поэтому лучше иметь к нему обертку. Bridges это либка-обертка-помощник, которая дает возможность легко и красиво выполнять сгенерированные SwifQL SQL-запросы в любом БД-драйвере. Именно тут, например, и есть batchInsert метод. SwifQL и Bridges не привязаны к Vapor совсем, то есть их можно использовать с любыми фреймворками. Т.е. если завтра условно Vapor умрет и появится что-то еще, то можно будет код для БД не переписывать под новый фреймворк. Так вот, так как они не привязаны к Vapor как Fluent, то и ModelAuthenticatable из коробки нету, но ты можешь ее написать по образцу как это сделано для Fluent'овской Model https://github.com/vapor/fluent/blob/4004e926cdef1fbb937501c8a60554349cced675/Sources/Fluent/ModelAuthenticatable.swift и, кстати, если напишешь, то можешь законтрибьютить в https://github.com/SwifQL/VaporBridges который является мини-оберткой над Bridges и сделан специально для Vapor и соответственно в нем и должна/может жить ModelAuthenticatable, но т.к. лично я вапоровской авторизацией не пользуюсь, то я не делал 🙂

Dmytro- Автор вопроса
iMike
Давай сначала разберемся с либками 🙂 SwifQL это ...

Спасибо за объяснение. Тогда проще будет переписать код что сейчас и делать авторизаци вручную

import Vapor import Bridges public protocol ModelAuthenticatable: Table, Authenticatable { static var usernameKey: KeyPath<Self, Column<String>> { get } static var passwordHashKey: KeyPath<Self, Column<String>> { get } func verify(password: String) throws -> Bool } extension ModelAuthenticatable { public static func authenticator( database: DatabaseIdentifier ) -> Authenticator { ModelAuthenticator<Self>(database: database) } var _$username: Column<String> { self[keyPath: Self.usernameKey] } var _$passwordHash: Column<String> { self[keyPath: Self.passwordHashKey] } } private struct ModelAuthenticator<User>: BasicAuthenticator where User: ModelAuthenticatable { public let database: DatabaseIdentifier public func authenticate( basic: BasicAuthorization, for request: Request ) -> EventLoopFuture<Void> { User.query(on: database, on: request) .where(\User._$username == basic.username) .first() .flatMapThrowing { guard let user = $0 else { return } guard try user.verify(password: basic.password) else { return } request.auth.login(user) } } }

Dmytro- Автор вопроса
iMike
import Vapor import Bridges public protocol Model...

А оно не будет работать с вейпором, так как там import Fluent и уже ModelAuthenticatable оттуда используется

добавил это в VaporBridges, доступно с 1.0.0-rc.1.4.0

Dmytro- Автор вопроса

Можешь еще добавить SessionAuthenticatable и ModelCredentialsAuthenticator? Там тоже пару полей поменять

Dmytro- Автор вопроса
iMike
добавил это в VaporBridges, доступно с 1.0.0-rc.1....

Уже надоел, наверное, но есть ли метод для batch update?

Dmytro
Можешь еще добавить SessionAuthenticatable и Model...

ModelCredentialsAuthenticatable переписал, а `ModelCredentialsAuthenticator` сходу не удалось

Dmytro- Автор вопроса
iMike
Если во флуенте не батч, а последовательные инсерт...

Разделил на несколько частей по 999, на некоторых возникает ошибка query failed: read(descriptor:pointer:size:): Connection reset by peer (errno: 54) или query failed: NIOPostgres error: protocol error: Unexpected connection close Что нужно сделать?

Dmytro- Автор вопроса
Dmytro
Разделил на несколько частей по 999, на некоторых ...

Нашел, я на каждый чанк открывал новый connection

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта