powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Delphi, FireBird создать таблицу в памяти клиента
368 сообщений из 368, показаны все 15 страниц
Delphi, FireBird создать таблицу в памяти клиента
    #39279487
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрых времен, специалисты! Нужен совет по логике? (пните куда рыть)

Дано: Delphi 2007, FireBird 2.1 (+EhLib, +Fib, + сторонние компоненты)

Все было разработано, все работало как надо, но в один миг СИЛЬНО увеличилась нагрузка (в сотни раз, фирма развивается и на такие нагрузки, я просто не расчитывал)

Логика значит сейчас такая:
Коннект к сторонней базе. Получаю в клиента ~3000 записи. Беру первую запись.
Делаю Select к своей базе проверяю по 3 значениям (индексы, план все вроде в порядке, запрос летит шустро, НО ИХ МНОГО). Если есть такая запись - забыли. Иначе полез по таблицам, добавляю в справочники инфу. Добавляю новую запись. Записал. Следующую запись... и по кругу, и так до конца... (ну там за одно еще справочники проверяются, но это не критично.) Естественно на сервере вскипает процессор под 100% пиком.

Все хорошо пока сторонних баз было 3-5. Но когда их стало под 200. Из каждой выдернуть все записи и на каждую запись кинуть Select в мою базу. Тут процессор чето приуныл. Тяну данные из 10 баз одновременно. Процессор в шоке. Полный цикл проходит за 40 минут, без ошибок и т.п.. Но процессор в это время "жужжит" и не дает работать бухгалтерии, от слова совсем.
Такой импорт делается 4-5 раз в день, сами понимаете, бухгалтерии времени на работу не остается.

Лирика кончилась. Проект буду переделывать.

Теперь вопрос: Вот чтоб не убивать сервер тупыми запросами select, можно ли как-то выдернуть кусок таблицы "от даты, до даты(которые известны при старте импорта" в память клиента и уже у него проводить сверку по конкретным параметрам?
Куда копать MemtableEh?

Желательно у клиента в памяти создать "нечто" к чему можно обращаться Query, т.е. виртуальную (БД) табличку. Куда рыть?

(Если вариант совсем глупый, пинайте ногами. За сумбурность извините, не спал, проект горит. Побеспокоил, потому, что времени на переработку НЕТ. Все перечитать не могу... пните что читать, куда думать? )
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279496
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

сначала объясни откуда взялись 200 БД и почему их нельзя слить в одну.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279501
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog, что мешает импортировать записи только от штампа времени последнего импорта?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279504
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

сначала объясни откуда взялись 200 БД и почему их нельзя слить в одну.

1. БД разные. 1С. Самописные Firebird. Текстовые файлы банковских выписок.
Вот так вот, а сливаются в одну УЖЕ в моей базе. Собственно она для этого и нужна.

2. Почему приходится перепроверять фигову тучу записей? Потому, что какой-нибудь бухгалтер нафигачит проводок задним числом... и пипец... какой-то оператор, перебьет к чертям вчерашнюю проводку. Поэтому каждую запись получил и лезу в свою базу проверять есть такая или подобная? (если есть подобная, то еще алгоритм "а не измененная ли это?")

Ну суть вопроса хочу уйти от сотен тысяч запросов к серверу. Получить кусок таблицы на клиента, там разобраться и уже с чистой совестью писать в базу.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279506
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Добавь в свои таблицы поле LAST_CHANGE: TIMESTAMP и на триггере BEFORE UPDATE OR INSERT заполняй его current_timestamp

Вот тебе и "можно ли как-то выдернуть кусок таблицы "от даты, до даты(которые известны при старте импорта"

Вместо сравнения "на клиенте" можешь делать сравнение сразу на основном сервере БД ( execute statement с подключением к внешней БД и вычитывание по времени иззменения в GTT ) - может стать лучше, а может и зуже, наверное особенно на супере.

2) а вообще тебе надо делать репликацию из "фильиальных" БД в master database

https://habrahabr.ru/post/117917/
http://www.codenet.ru/db/interbase/Interbase-Replications/
18299570
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279508
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogКуда копать MemtableEh?


ClientDataSet?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279510
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_devdgdog, что мешает импортировать записи только от штампа времени последнего импорта?

Старые записи могут добавиться, измениться (бухгалтерии косячят. 1С откатывается в БэкАп...) Из вводных данных имею только конкретные даты "от... и до..." Остальное я и разбираю. Но слишком много обращений к бд. Они плевые, но их много. Мнеб вот это "От... и до..." как-то на клиента утянуть и там уже крутить - вертеть и к базе лишний раз не лезть.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279511
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog1. БД разные. 1С. Самописные Firebird. Текстовые файлы банковских выписок.
Вот так вот, а сливаются в одну УЖЕ в моей базе. Собственно она для этого и нужна.

2. Почему приходится перепроверять фигову тучу записей? Потому, что какой-нибудь бухгалтер нафигачит проводок задним числом... и пипец... какой-то оператор, перебьет к чертям вчерашнюю проводку. Поэтому каждую запись получил и лезу в свою базу проверять есть такая или подобная? (если есть подобная, то еще алгоритм "а не измененная ли это?")


тогда похоже тебе надо не централизовывать это на сервере, а наоборот распараллеливать.

Пусть на каждой из "200 БД" запускается служба подготовки к выгрузке.
На сервере формулируешь условия/требования к выгрузке, и на каждой из 200 БД подготавливается пакет, который уже потом отправляется основнму серверу
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279512
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

открой для себя репликацию.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279513
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ага, репликацию баз FB с текстовыми файлами....
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279515
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

с трудом представляю сервак который потянет 200 БД одновременно. Ну 10 ещё куда ни шло.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279516
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,
ну как вариант
записать всё полученное в промежуточную табличку в своей базе и в ХП все скопом обработай
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279517
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

я так понял что он сначала текстовые файлы в отдельные БД на firebird сливает, а потом из этих БД в центральную ещё.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279521
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogДелаю Select к своей базе проверяю по 3 значениям (индексы, план все вроде в порядке,
запрос летит шустро, НО ИХ МНОГО).

Покажи код, которым это делаешь и план запроса.

dgdogможно ли как-то выдернуть кусок таблицы "от даты, до даты(которые известны при
старте импорта" в память клиента и уже у него проводить сверку по конкретным
параметрам?
Можно, но не нужно. Слияние двух отсортированных потоков делается проще и работает быстрее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279523
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисArioch,

я так понял что он сначала текстовые файлы в отдельные БД на firebird сливает, а потом из этих БД в центральную ещё.

Нет. Цепляюсь например (клиентом) к 10 1С ком соединением. Получаю из каждой кусок данных от ДАТЫ до ДАТЫ. Потом клиент берет каждую запись и лезет в мою базу с проверкой есть такая или нет? Если есть - забыли. Если нет - добавить. (Это грубо там логика в клиенте сверка всяких параметров полученной записи и записей в БД... я такую логику в самом Firebird не осилю.)

(Базы разные от 1С и до папки с файлами платежных поручейний из банков.)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279524
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денися так понял что он сначала текстовые файлы в отдельные БД на firebird сливает

хорошо если так, у меня сложилось впечатление - что нет. Хотя я не вполне автора понимаю.

ну вот на этом шаге ему и надо прописывать всю инфу, определяющую отсылать их на центральный сервер или нет.
эта инфа должна быть уже в промежуточной базе.

PS. За сумбурность извините, не спал, проект горит
Таки пойти и лечь спать.
Альтернатива - перестанешь понимать собственные деййствия и наворотишь второпях такого - что придется потом месяц разгребать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279528
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЦепляюсь например (клиентом) к 10 1С ком соединением. Получаю из каждой кусок данных от
ДАТЫ до ДАТЫ. Потом клиент берет каждую запись и лезет в мою базу с проверкой есть такая
или нет?

Если не "цепляться к 1С", а получать от них штатные файлы изменений, генерируемые !С
репликацией, то можно обойтись без проверки существования записи в БД. А так ты, конечно,
раз за разом молотишь тонны одного и того же бесполезного мусора.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279529
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog Получаю из каждой кусок данных от ДАТЫ до ДАТЫ. Потом клиент берет каждую запись и лезет в мою базу с проверкой есть такая или нет? Если есть - забыли. Если нет - добавить.

я бы сначала сливал все данные от ДАТЫ до ДАТЫ как есть в GTT уровня транзакции, а потом в ХП раскладывал всё по полочкам и всё это в одной транзакции. Это будет быстрее чем тягать все данные из обоих БД в клиента и там сравнивать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279531
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogНет. Цепляюсь например (клиентом) к 10 1С ком соединением. Получаю из каждой кусок данных от ДАТЫ до ДАТЫ. Потом клиент берет каждую запись и лезет в мою базу с проверкой есть такая или нет?

готовь на сервере пакет с требованием к репликации.

те самые "от ДАТЫ до ДАТЫ" и любые данные требуемые любому из клиентов для полной "проверкой есть такая или нет"

такой вот мега-файл, достаточный для любого клиента из 200 для создания пакета репликации

200 клиентов этот файл скачивают, распаковывают и начинают каждый локально у себя сверять что нужно отослать в центр

потом на каждом клиенте в отдельности - не трогая сервер вообще - формируется выжимка, пакет который надо выгрузить на сервер. Также в виде файла.

и только потом готовый пакеты с клиентов раззиповываютс я и втягиваются в основную БД.

распараллеливай работу, всё, централизовать поздно, основной сервер уже захлебнулся.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279532
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

....это если сервер классик.

что-то мне страшно за такую работу прямо на сервере.
если клиент бешено тормозит - это проблемы клиента.
но если у него весь сервер ляжет и все работающие с ним программы начнут тормозить в такой момент....
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279533
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть на каждой из "200 БД" запускается служба подготовки к выгрузке.

(базы разные от 1С, Firebird, ... и до простых текстовых файлов экспорта из клиентбанков)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279536
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисArioch,

с трудом представляю сервак который потянет 200 БД одновременно. Ну 10 ещё куда ни шло.

Сервак тянет 1 БД Firebird Остальные базы лежат где-как и в локальной сети и на удаленках... я из них только данные тяну на клиента, а уже потом фигачу в БД

(плохо я задачу объясняю, завтра высплюсь мож легче будет )
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279537
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

я как бы склонен к тому что ТС не идиот чтобы использовать супер в 2.1 для многопользовательского доступа.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279539
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogПроцессор в шоке. Полный цикл проходит за 40 минут
Показывай код.

И назови архитектуру сервера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279540
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

система строилась когда фирма была мааааленькая и удаленных БД было 3-5 штук

а перевели ли с тех пор на класика - хз
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279541
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

и какая связь между количеством БД 1С'овских и архитектурой?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279544
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денися как бы склонен к тому что ТС не идиот чтобы использовать супер в 2.1

Я практически уверен в обратном.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279547
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogПусть на каждой из "200 БД" запускается служба подготовки к выгрузке.

(базы разные от 1С, Firebird, ... и до простых текстовых файлов экспорта из клиентбанков)

вот и делай под каждый источник данных - свою локальную службу подготовки к репликации, заточенную именно на его формат.

грубо говоря, берешь своего клиента, вырезаешь из него все источники, кроме одного нужного на конкретном месте, и делешь программу выгрузки данных для Ивановой Марьи Владимировны.

Остальные базы лежат где-как и в локальной сети и на удаленках... я из них только данные тяну на клиента, а уже потом фигачу в БД

БД сдохла, забудь. Эту работу можно теперь делать только на других машинах.

Либо на самих источниках данных по мега-файлу запроса к репликации - НЕ ТРОГАЯ ОСНОВНОЙ СЕРВЕР вообще

Либо создавать второй сервер, на него выгружать полную копию основной БД - см. nbackup - и там молотить твои 40 минут опять таки НЕ ТРОГАЯ ОСНОВНОЙ СЕРВЕР, сохраняе изменения в файл-пакет, и уже готовую выжимку не требующую больше проверок - отсялать на основной.

Во втором случае, однако, потенциально будут две проблемы:

1) пока твои 40 минут шли бухи что-то сделали с основной БД и пакет подготовленный по слепку 40-минутной давности уже не подходит 1 в 1, нужно его обрабатывтаь напильником. Может такое быть или нет? Не знаю, только ты знаешь с какими данными кто работает в твоей системе.
2) сегодня у тебя 200 баз, а завтра 20 000 - и второй сервер так же захлебнётся.

То есть второй вариант - это быстро заткнуть дырку и отдышаться. А в конечном итоге тебе все равно придется работу распараллеливать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279548
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 25 июля 2016 г. 12:24:36:

Симонов Денис> я как бы склонен к тому что ТС не идиотты склонен недооценивать влияние мировой энтропии
на всеобщую идиотию человеческих индивидуумов.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279551
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениси какая связь между количеством БД 1С'овских и архитектурой?

прямой нету

но примерно в такой же пропорции увеличивались и остальные рабочие места - в том числе работающие с его ФБ-самопиской.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279552
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Dimitry Sibiryakov]
dgdogДелаю Select к своей базе проверяю по 3 значениям (индексы, план все вроде в порядке,
запрос летит шустро, НО ИХ МНОГО).

Покажи код, которым это делаешь и план запроса.
Клиент формирует
Код: pascal
1.
 select * from SDELKA where PP='ëÿëÿëÿ' and RASHOD=10003 and DATA='25.05.2016' 



отсылает
авторPlan
PLAN (SDELKA INDEX (SDELKA_IDX2))

Adapted Plan
PLAN (SDELKA INDEX (SDELKA_IDX2))

------ Performance info ------
Prepare time = 15ms
Execute time = 0ms
Current memory = 1 846 464
Max memory = 3 084 544
Memory buffers = 75
Reads from disk to cache = 3
Writes from cache to disk = 0
Fetches from cache = 15
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279556
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovСимонов Денися как бы склонен к тому что ТС не идиот чтобы использовать супер в 2.1

Я практически уверен в обратном.

Классик
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279564
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogКлиент формирует
За использование непрепарированных запросов в таких условиях надо отрывать руки. Используй
параметры и получишь нужное ускорение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279566
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надеюсь, запросы не текстом каждый раз наново формируются, а используют параметры и prepare ?


группируй свои запросы, хотя бы по дате

Код: sql
1.
2.
3.
 ... where PP = :PP 
        and (RASHOD betwen :RASHOD_MIN and :RASHOD_MAX)
        and (DATA between :DATA_MIN and DATA_MAX)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279568
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
 ... where PP = :PP 
        and (RASHOD between :RASHOD_MIN and :RASHOD_MAX)
        and (DATA     between :DATA_MIN and :DATA_MAX)



http://bobby-tables.com/ru_RU/delphi.html
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279575
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochdgdogПусть на каждой из "200 БД" запускается служба подготовки к выгрузке.

(базы разные от 1С, Firebird, ... и до простых текстовых файлов экспорта из клиентбанков)

вот и делай под каждый источник данных - свою локальную службу подготовки к репликации, заточенную именно на его формат.

грубо говоря, берешь своего клиента, вырезаешь из него все источники, кроме одного нужного на конкретном месте, и делешь программу выгрузки данных для Ивановой Марьи Владимировны....

Практически так оно и есть. Запускается десять разных клиентов которые тащат конкретные данные из конкретных источников. Но мне каждую строчку надо сверить с моей базой. Они наваливаются разом ... и привет ЦП.

Логика проверки вся на клиенте. В Firebird у меня мозгов не хватит все перетянуть.

ЦП кстати гавно I5. Лучше ближайшие три месяца не будет. ВотТакВота
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279577
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и до кучи

линейный поиск на клиенте (типа FieldByName и ParamByName в Delphi) тоже использовать в цикле НЕЛЬЗЯ

если подобное у тебя есть - убирай его наружу циклов
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279579
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogПрактически так оно и есть. Запускается десять разных клиентов которые тащат конкретные данные из конкретных источников. Но мне каждую строчку надо сверить с моей базой

НЕ НАДО

делай клиенты, которые не будут трогать основной сервер вообще.

сервер должен подготовить ОДИН общий zip-файл с требованием к репликации и всей сопутствующей инфой, которого будет достаточно ЛЮБОМУ клиенту для проверки всех его записей НЕ ТРОГАЯ сам сервер
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279580
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЗапускается десять разных клиентов которые тащат

ЦП кстати гавно I5

ну так запускай свои 10 клиентов на 10 разных процессоров

если даже один i5 для тебя мелочь несущественная, то 10 штук i5 побыстрее будут
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279584
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochсервер должен подготовить ОДИН общий zip-файл с требованием к репликации и всей
сопутствующей инфой, которого будет достаточно ЛЮБОМУ клиенту для проверки всех его
записей НЕ ТРОГАЯ сам сервер
Во-первых, вы с ТСом клиентами называете разные вещи.
Во-вторых, у него на подготовку файла уйдёт больше ресурсов, чем сейчас.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279585
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЦП кстати гавно I5. Лучше ближайшие три месяца не будет.
- Сам ты такое слово. (падобраму канешна) :-)
Потому как нефег сваливать на ЦП свое не знание и не понимание, прикрываясь "Он железный, вот пусть и пашет..."
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279587
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochНадеюсь, запросы не текстом каждый раз наново формируются, а используют параметры и prepare ?


группируй свои запросы, хотя бы по дате

Код: sql
1.
2.
3.
 ... where PP = :PP 
        and (RASHOD betwen :RASHOD_MIN and :RASHOD_MAX)
        and (DATA between :DATA_MIN and DATA_MAX)



Пробовал и собирать строку и через параметры. А смысл? Нагрузка то на сервер не уменьшается. Сейчас параметрами шьет. Но один фик, там математика сначала обрабатывает ибо надо обрезать пробелы, проверить формат прилетевший из 1С по COM. Еще этот долбаный NULL ))) Чего и как нафигачили в назначении платежа и т.п. Но это отлаженная логика. Дело только в забое ЦП кучей запросов. Которые я хочу свести к одному запросу. Вытянуть данные по Клиенту от даты, до даты на клиента и там в памяти разобрать. Подготовить файл-табличку и её залить в БД.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279588
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВо-вторых, у него на подготовку файла уйдёт больше ресурсов, чем сейчас.


судя по вышесказанному файл по сути будет линейной срезкой нескольких таблиц за три последних месяца

так что ресурсы если какие и будут нужны - то disk i/o и больше ничего

у него затык в процессоре => поставить отдельный винчестер исключительно под формирование пакета и прием ответных пакетов означает разгрузить его бутылочное горлышко, что ему и требуется
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279593
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogНагрузка то на сервер не уменьшается. Сейчас параметрами шьет.

Prepare делаешь ? как минимум Prepare добавляет нагрузку серверу на каждый отдельный запрос

либо решай радикально - избавляй сервер от этой работы вообще

либо грызись за каждый каждый процент, в том числе и по возможности убирай каждый лишний случай парсинга SQL-запросов на сервере
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279594
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LInedgdogЦП кстати гавно I5. Лучше ближайшие три месяца не будет.
- Сам ты такое слово. (падобраму канешна) :-)
Потому как нефег сваливать на ЦП свое не знание и не понимание, прикрываясь "Он железный, вот пусть и пашет..."

А кто? Я за него, чтоли буду считать и тригерры с процедурами на логарифмической линейке высчитывать
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279595
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovdgdogКлиент формирует
За использование непрепарированных запросов в таких условиях надо отрывать руки. Используй
параметры и получишь нужное ускорение.


Ускорение чего? Как быстро запрос долетит до сервера???? Так в этом нет беды... Сервак, что так, что эдак переварить не успевает.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279596
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogПробовал и собирать строку и через параметры. А смысл? Нагрузка то на сервер не уменьшается.

Значит плохо пробовал. Потому что от применения препарированных запросов нагрузка должна
уменьшаться. В твоём случае - в 15 раз. Код показывай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279597
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
троллетопег.
имхо.
ТС - картонная дурилка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279598
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

твое дело, конечно не руками считать - а заранее продумать как сделать, чтобы не гонять процессор попусту и считать только то, что надо

потому что как-то это все странно звучит, если вместе

и i5 - дерьмо (вы русские есть очень много кушать!)
и одного нового процессора не получишь, хотя фирма растёт на дрожжах и заела себе сотни новых компьютеров с базами данных на них

странно это звучит вместе взятое
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279599
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogУскорение чего? Как быстро запрос долетит до сервера????

Ускорение обработки запроса сервером. За счёт понижения нагрузки на ЦПУ, который, по твоим
словам, и является у тебя бутылочным горлышком.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279600
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogУскорение чего? Как быстро запрос долетит до сервера?

срочно читай, что такое sql query prepare, и переставай болтать ерундой
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279601
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МимопроходящийТС - картонная дурилка.
Возможно, ему действительно пора хорошенько выспаться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279603
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogMemory buffers = 75


Хмммм....

и мегатонны запросов "дай мне вот эту запись! а теперь дай соседнюю! и ещё сто соседних"
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279604
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochХмммм....
Не придирайся. А то ещё заставишь его управление транзакциями переделывать и параметры
лок-менеджера крутить. А он явно на данный момент на такую мозговую работу неспособен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279606
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochdgdogНагрузка то на сервер не уменьшается. Сейчас параметрами шьет.

...

либо решай радикально - избавляй сервер от этой работы вообще
....

Ну а я в чем и прошу помощи))) Как бы одним запросом свалить нужную выборку ИЗ МОЕЙ БАЗЫ на клиента. Там разобрать и слить обратно только нужное. ВОт вопрос то ВО ЧТО слить? Ну не в текстовый же файл. Куда в память это можно засунуть... в какой компанент? Вообще в идеале чтоб до этого компанента можно было QUERY добраться (тогда вообще все в шоколаде)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279607
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, если к FB такие бестолковые запросы, то что говорить о других к "источникам данных"?..
Там лопатить всю систему надо и с нуля.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279609
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dimitry Sibiryakov!
You wrote on 25 июля 2016 г. 13:01:16:

Dimitry Sibiryakov> Возможно, ему действительно пора хорошенько выспаться.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279610
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovdgdogПробовал и собирать строку и через параметры. А смысл? Нагрузка то на сервер не уменьшается.

Значит плохо пробовал. Потому что от применения препарированных запросов нагрузка должна
уменьшаться. В твоём случае - в 15 раз. Код показывай.


Код: pascal
1.
2.
3.
4.
... form1.pfibquery4.SQL.Text:='select * from SDELKA where PP='+quotedstr(pp)+' and Prihod='+ summtmp+' and DATA='+quotedstr(datetostr( zapros_tab.Получить(y).Дата));
 form1.pfibquery4.ExecQuery;
 if  form1.pfibquery4.FieldByName('id').IsNull then
 BEGIN/// ДУБЛЕЙ НЕТ....
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279611
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА то ещё заставишь его управление транзакциями переделывать

Кстати, да: аффтар, а не идёт ли там у тебя каждый запрос к серверу в отдельной транзакции?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279612
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov А он явно на данный момент на такую мозговую работу неспособен.


Во-первых подкрутка ОДНОГО параметра в конфиге - это далеко не изчение лок-менеджера.
У него там 15 чтений из кэша и три с диска, однако....

Хотя если затык в процессоре, то это действительно не важно (если только винчестер в PIO-режим не свалился, или гипер-агрессивный анивирус не проверяет каждую страницу БД).

Во вторых, на счет "не способен", я ещё на первой странице советовал

AriochPS. За сумбурность извините, не спал, проект горит
Таки пойти и лечь спать.
Альтернатива - перестанешь понимать собственные действия и наворотишь второпях такого - что придется потом месяц разгребать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279614
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogform1.pfibquery4.SQL.Text:='select * from SDELKA where PP='+quotedstr(pp)+' and Prihod='+
summtmp+' and DATA='+quotedstr(datetostr( zapros_tab.Получить(y).Дата))

И в каком месте это использование параметров, чудак?..

PS: За звёздочку - отдельный ицых с гвоздями.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279616
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogDimitry Sibiryakovпропущено...

Значит плохо пробовал. Потому что от применения препарированных запросов нагрузка должна
уменьшаться. В твоём случае - в 15 раз. Код показывай.


Код: pascal
1.
2.
3.
4.
... form1.pfibquery4.SQL.Text:='select * from SDELKA where PP='+quotedstr(pp)+' and Prihod='+ summtmp+' and DATA='+quotedstr(datetostr( zapros_tab.Получить(y).Дата));
 form1.pfibquery4.ExecQuery;
 if  form1.pfibquery4.FieldByName('id').IsNull then
 BEGIN/// ДУБЛЕЙ НЕТ....



ад и холокост...

1. приходы и даты бери не значениями а диапазонами, для каждого PP выбираешь диапазаоны - минимум и максимум
19450595

2. Текст запроса задается ОДИН раз, потом делается Prepare. При изменении значений любых параметров текст запроса не меняется. Вообще не меняется. Никогда.
После изменения значений параметров повторнo запускаешь Open/ExecQuery не меняя текст.

3. FieldByName и PrepareByName делается ОДИН раз, после Prepare и никогда не повторяется внутри циклов, перебирающих строки 19450626
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279618
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch3. FieldByName и PrepareByName

ParamByName
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279619
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochНадеюсь, запросы не текстом каждый раз наново формируются, а используют параметры и prepare ?



Запутал конкретно)))

Arioch...

Prepare делаешь ? как минимум Prepare добавляет нагрузку серверу на каждый отдельный запрос

...

Запутал. Но сути дело не меняет. Сейчас строкой формирую. Параметрами пробовал смысла не увидел.

Про FieldByName и иже с ними понял. Подумаю как убрать из цикла... но суть не в этом. Хотя подумаю, да есть на запись все идет в таком виде
Код: pascal
1.
                                    form1.pFIBDataSet2.FieldByName('KL_PRIHOD').Asfloat:=strtofloat(string(zapros_tab.Получить(y).Сумма));


Но до записи из 3000 проверенных-сверянных записей добирается 1-2. Не критично... остальные по If срезаются. Т.е. до этого места вооообще редко доходит дело.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279622
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog Запутал. Но сути дело не меняет. Сейчас строкой формирую. Параметрами пробовал смысла не увидел.

Если ты текст запроса снова и снова перед каждым ExecQuery присваивал - то его и не будет.
Тект запроса задается ОДИН раз для всех данных сразу. Потом делается prepare.
Потом только меняются параметры не трогая текст запроса.


остальные по If срезаются. Т.е. до этого места вооообще редко доходит дело.

а в if-e у тебя что? такой же fieldbyname
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279623
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovdgdogУскорение чего? Как быстро запрос долетит до сервера????

Ускорение обработки запроса сервером. За счёт понижения нагрузки на ЦПУ, который, по твоим
словам, и является у тебя бутылочным горлышком.


Спасибо, не знал. Почитаю. Вечером попробую. Но пробовал на одном из вариантов Клиента, не видел разницы. Но блин попробую
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279626
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogне видел разницы

если у тебя нагрузка процессора уже сильно больше 100% - то ты ее и не увидишь, освободившуюся часть процессора просто возьмет другая задача

такие есты надо проводить рпи загрузке чуть меньше 100%
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279627
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogне видел разницы.
Учитывая приведённый образец кода, это вполне возможно. Особенно, если он (говнокод)
крутится на том же компьютере, что и Firebird.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279628
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovPS: За звёздочку - отдельный ицых с гвоздями.


в коде типа "form1.pfibquery4" редко случается что-то другое....
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279629
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog
Практически так оно и есть. Запускается десять разных клиентов которые тащат конкретные данные из конкретных источников. Но мне каждую строчку надо сверить с моей базой. Они наваливаются разом ... и привет ЦП.

Логика проверки вся на клиенте. В Firebird у меня мозгов не хватит все перетянуть.


ну раз так тебе стоит записаться на курсы повышения квалификации http://www.ibase.ru/courses/
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279632
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochdgdog,
...
и i5 - дерьмо (вы русские есть очень много кушать!)
и одного нового процессора не получишь, хотя фирма растёт на дрожжах и заела себе сотни новых компьютеров с базами данных на них

странно это звучит вместе взятое

Ээээ. Извини Человек. Не думал, что так все в штыки.
Рабочий сервер Xeon E5620 2.400 Гг 2Гб оперативки. Виртуальный сервер который выделил админ. Больше не даст ни кусочка.
I5 Это мой нубук на котором ставлю все эксперименты.

И Xeon и I5 Уходят в 100% загрузку. Нет, я могу запускать импорт из баз не с 10, а с 5 одновременно и тогда забиваю ЦП скачкообразно и бухи могут работать, но тогда импорт длится 3-5 часов.

Вопрос процессором не решить. Моя база не была важной для конторы до последнего времени, поэтому о железе специально под нее никто не думал. Да и не в железе дело. Косяк в проектировании.
Походу Delphi-стам надо вопрос переадресовать чтоли? Чего на клиент накрутить, чтобы туда кусок таблицы выгрузить и обращаться к данным. (текстовый файл не подходит)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279634
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovAriochХмммм....
Не придирайся. А то ещё заставишь его управление транзакциями переделывать и параметры
лок-менеджера крутить. А он явно на данный момент на такую мозговую работу неспособен.


Да я собственно в Firebirde только в 2002м проектировал чето... дипломы студентам и т.п. Ну и вот в 2014 чето эту халтурку слепил. Им на время надо было...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279635
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog Чего на клиент накрутить
- знания и понимание. :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279637
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogРабочий сервер Xeon E5620 2.400 Гг 2Гб оперативки. Виртуальный сервер который выделил админ. Больше не даст ни кусочка.

это ни разу не сервер, а говно
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279638
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogРабочий сервер Xeon E5620 2.400 Гг 2Гб оперативки. Виртуальный сервер который выделил админ. Больше не даст ни кусочка.
I5 Это мой нубук на котором ставлю все эксперименты.


это не так

ещё есть упомянутые тобой несколько сотен БД - а значит и несколько сотен комьютеров, на которых те БД работают
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279639
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog эту халтурку слепил.
Что слепил, то и получил....
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279643
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochdgdogMemory buffers = 75


Хмммм....

и мегатонны запросов "дай мне вот эту запись! а теперь дай соседнюю! и ещё сто соседних"

Как высчитать правильно буффер? Ссылку бы? Или цифру? Реально глаза в кучу.

ДА РЕБЯТА, В БД Я ЛОШАРА. Признаю. Сам не рад, что связался с этой темой, но отступать некуда, за спиной ипатека и ребенок. Херня война прорвемся. Надо будет, значит всю ночь буду читать и не одну. Вот про буффер сказали - СПАСИБО. Дайте ссылку как поправить... и продалжайте тыкать носом. Только признателен.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279646
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog в 2014 чето эту халтурку слепил. Им на время надо было...

раз "на время", значит они ещё тогда знали куда поедут дальше, когда халтурки перестанет хватать

время пришло

пусть выполняют свое тогдашнее решение

либо пусть переводят халтурку в статус постоянной части инфраструктуры фирмы, чтобы никаких "админ больше не даст" даже не звучало. Раз больше не даст - пускай сам руками обсчитывает.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279647
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch срочно читай, что такое sql query prepare, и переставай болтать ерундой
Ушел в Яндекс-Хренадекс... вы если че не поминайте лихом )))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279651
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovDimitry SibiryakovА то ещё заставишь его управление транзакциями переделывать

Кстати, да: аффтар, а не идёт ли там у тебя каждый запрос к серверу в отдельной транзакции?..



Ну я думал не спросите)))) А чё???? Сейчас как раз копаюсь в своем коде двухгодичной давности))) Нет не скажу. Вы ругаться будете)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279654
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogКак высчитать правильно буффер? Ссылку бы? Или цифру? Реально глаза в кучу.

ДА РЕБЯТА, В БД Я ЛОШАРА

ЕСЛИ у тебя затык только в процессоре и не в диске, то ПОКА тебе это не актуально

чтобы ПОСЧИТАТЬ значения - нужно преставлять сколько и каких данных твоим программам реально нужно, и как сбалансировать 2гб оперативки между ВСЕМИ подключенными программами

в качестве грубой прикидки можешь глянуть в http://ib-aid.com/ru/optimized-firebird-configuration/

но повторяю, ЕСЛИ у тебя затык только в процессоре и не в диске, то ПОКА тебе это не актуально
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279656
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

я же сказал на курсы. Ну не возможно в форуме обучить человека.

Скажи ка сколько у тебя пользователей на Firebird и сколько весит БД. 2 Гб памяти на классике это конечно пипец, если коннектов хотя бы 50, то тушите свет.

Давать советы по увеличению Memory buffers до того как ТС не скажет сколько у него коннектов преждевременно.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279657
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogНу я думал не спросите)))) А чё?

да так, ещё больше нагрузки на сервер, который и так подыхает

как с prepare, который вы неявно гоняете на каждый запрос в отдельности

http://www.ibase.ru/dontdoit/
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279658
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog Дайте ссылку как поправить... и продалжайте тыкать носом. Только признателен.
- Дружище....
Отсыпаешься и на свежую голову читаешь IBASE.RU.
Начиная для чайников и постепенно в глыбь вопроса.
И даже не надейся на "волшебную кнобку" которая разом тебе все исправит.
Перепахать реально нужно всё.
Начиная с кода, попутно кумекая над оптимизацией таблей.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279660
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochdgdogРабочий сервер Xeon E5620 2.400 Гг 2Гб оперативки. Виртуальный сервер который выделил админ. Больше не даст ни кусочка.
I5 Это мой нубук на котором ставлю все эксперименты.


это не так

ещё есть упомянутые тобой несколько сотен БД - а значит и несколько сотен комьютеров, на которых те БД работают

Это не так

Много 1С баз болтаются на одном SQL сервере... остальное да. Есть файловые базы 1С есть машинки с IB и Firebird... в конце концов есть файл сервер где в папочке валяются текстовые файлы... мне то от этого не легче
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279664
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogмне то от этого не легче
Всерьёз надеешься, что кто-то тут пожалеет человека, который собственными руками сделал
всё возможное для того, чтобы система никогда не работала быстро?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279667
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот как бы да

спать-спать-спать

а потом учиться-учиться-учиться

dgdogЧего на клиент накрутить, чтобы туда кусок таблицы выгрузить и обращаться к данным.

я тебе два варианта уже предложил "как реогранизовать РабКрИн"

не в терминах "бросить волшебный компонентик на формочку"

а в терминах организации взаимодействия, потоков данных.

но на это уровне ты сейчас размышлять не способен.
а без этого - без изменения "потоков данных" - вопрос "что накрутить" не имеет смысла.

и наоборот, если ты решишь организовать работу своих программ по-новому, то "что накрутить" превращается в элементарное следствие.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279669
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog остальное да. Есть файловые базы 1С есть машинки с IB и Firebird... в конце концов есть файл сервер где в папочке валяются текстовые файлы... мне то от этого не легче

в пропагандируемом мной варианте "клиенты не трогают основной FB-сервер, вообще" от этого как раз легче, потому чт оклиенты работают именно на этих машинах не убивая оперативку (которой там считай что нет) и процессор FB-сервера
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279670
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

я же сказал на курсы. Ну не возможно в форуме обучить человека.

Скажи ка сколько у тебя пользователей на Firebird и сколько весит БД. 2 Гб памяти на классике это конечно пипец, если коннектов хотя бы 50, то тушите свет.

Давать советы по увеличению Memory buffers до того как ТС не скажет сколько у него коннектов преждевременно.


Пользователей (вот которые обрабатывают данные) 3 ТРИ. Когда идет импорт я запускаю еще по 10 клиентов. Т.е. пик 13. Одна база закончила импорт, на ее место заступает другая и так до 204 штук. (В идеале надо чтоб все 204 штуки разом летели, но это не реально с моими познаниями БД. )Потом пользователей опять 3 ТРИ. У меня вопрос как облегчить именно ПИК момент загрузки импорта. В память и в диск сервер даже близко не упирается. База 700 метров всего

Через час домой. СПАТЬ)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279672
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Dgdog!
You wrote on 25 июля 2016 г. 13:55:16:

Dgdog> Через час домой. СПАТЬ)))вот так всегда! на самом интересном месте... (с)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279677
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Он на склад, завтра тебе еще попкорна принесёт, более забористого

Чем далше в лес, тем толще партизаны
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279679
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

ну тогда для начал увеличь Memory buffers до значения 512-1024. И перепиши всё с использованием параметров. Хотя по большому счёту там до хрена надо переделать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279681
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogВ идеале надо чтоб все 204 штуки разом летели, но это не реально с моими познаниями БД

как одно связано с другим ?

сейчас у тебя просто сервер невытянет 200 одновременных подключений, 2 гб - это мало, да еще на классик-сервере

но при чем тут познания ?

а чтобы "летали одновременно", они должны летать локально, на машинах с источниками данных, и не трогая твой FB-сервер вообще
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279683
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

ну тогда для начал увеличь Memory buffers до значения 512-1024. И перепиши всё с использованием параметров. Хотя по большому счёту там до хрена надо переделать.

Ну значит до хрена и будем переделывать. Че уж раз вляпался. Самн нагородил... сам и разгорожу. За любы советы и тычки носом буду рад. Ibase.ru сегодня не вкурю. Ушел читать про буфер и посмотрю где можно уйти в параметры. но в код и к серверу сегодня не полезу)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279685
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogно в код и к серверу сегодня не полезу)))
Первая здравая мысль. (смайлик с пивом)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279691
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogУ меня вопрос как облегчить именно ПИК момент загрузки импорта. В память и в диск сервер даже близко не упирается. База 700 метров всего

выгрузить в отдельный файл (можно дже и файл БД - клиент его прочитает через FB Embedded) все данные, нужные клиентам для сверки, скорее всего это будет чисто временная срезка нескольких таблиц за последние NN месяцев

растиражировать этот файл по компьютерам с источниками данных

на тех комьпютерах запустить на каждом по модифицированному клиенту, которые
1) будут сверяться не по освновной перегруженной БД, а по этому файлу
2) будут нужные данные заливать не прямо в базу, а в промежуточный файл

потом собираешь все эти файлы с уже проверенными и очищенными данными со всех клиентов на сервер

потом на сервере уже ОДНИМ (модифицированным в противоположную сторону) клиентом читаешь эти файлы один задругим и вливаешь их в БД в одном подключении
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279698
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
доктор, а вы геморрой по фотографиям не лечите? (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279702
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

с удовольствием!!!

про гарантии результата прочитаете в типовой EULA
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279708
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog.....слить обратно только нужное. ВОт вопрос то ВО ЧТО слить? Ну не в текстовый же файл..

можно и в текстовый - JSON или XML
плюс - если что-то не так для отладки можно этот файл открыть в блокноте и своими глазами увидеть содержимое
ещё плюс - в один файл можно сливать записи разных форматов, в том числе и просто описание, с какого клиента, с какого источника данных за какой срок эта выжимка сформирована

не хочется - возьми простые табличные файлы DBF - http://TDBF.sf.net например
но если данные разного формата - придётся несколько файлов-таблиц делать
впрочем, никто не мешает после формирования просто упрятать их все в один zip
опять же просмотрщиков содержимого DBF как собак нерезанных, даже в Total Commander можно смотреть

можно, если тебе так охота, и в SQL БД типа например SQLite
или типа Firebird Embedded
Но я бы не стал, только если импорт этих данных потом делать изнутри самого сервера средствами чистого FB SQL.
А если ты импорт на Паскале пишешь - то варианты выше будут удобнее
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279712
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийдоктор, а вы геморрой по фотографиям не лечите? (с)Это не геморрой, это 3,14..ец, а его мы не лечим.

Про external tables автор знает?
Хотя при его подходе (в первую очередь) и аппаратуре (во вторую) это тоже не поможет.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279713
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

боже упаси ему с его опытом работать напрямую с бинарными данными!
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279714
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch, не грузи чела...
Ему бы, для начала, разобраться в элементарных вещах принятых в культурном FB-програминге. :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279715
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

ты это... ТС умными фразами не путай. Пока что судя по его квалификации он это сделать не способен.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279717
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIne,

а ему все равно придется в этом разбираться, пуст ьсразу составляет список внеклассного чтения на ление каникулы

если у них контора реально способна внезапно вырастать в сотню раз - то ему придется переходить к параллельной обработке раньше или позже

....а то он потом ещё одного мертворожденного монстра слепит в итоге.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279722
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochесли у них контора реально способна внезапно вырастать в сотню раз
- то ему придется переходить к параллельной обработке раньше или позже

Не передергивай.
Монстру он сваял в 2014 (начало кризиса) , а ща какбэ 2016 на дворе. И оборот мог вполне вырасти в разы. Но не мозги начальства.
Бо иначе они не брали бы чела со стороны на раховую халтуру. А искали и растили на постоянке. :-)
Такшта...

А рано - надо, если по уму, вытянуть ему свою задницу.
И ушь потом думать наперед, не в панике:
[youtube=
YouTube Video
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279723
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochDi_LIne,

а ему все равно придется в этом разбираться, пуст ьсразу составляет список внеклассного чтения на ление каникулы

если у них контора реально способна внезапно вырастать в сотню раз - то ему придется переходить к параллельной обработке раньше или позже

....а то он потом ещё одного мертворожденного монстра слепит в итоге.

С буфером разобрался(ну как разобрался?!!! Почитал) . Ночью перенастрою потестирую. Хотя на стенде к производительности получил немного. Только вот вопрос почему на 1024 разницы с 75 не ощутил, а на 512 заметил. Хотя я без секундомера сидел)))


Ну значит родЮ еще одного мертворожденного. Хотя в замутненном умишке проскакивает мысль переписать клиента с нуля. Сейчас по возможности выкрутить производительность из того, что под рукой. И переписаться... Но со знаниями БД конечно БЕДА
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279724
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[youtube=
YouTube Video
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279727
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

прежде чем начать что-то переписывать прочитай как можно больше умных статей, доку по Firebird, книжки умные и продумай архитектуру, а то потом ещё раз будешь переписывать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279730
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogТолько вот вопрос почему на 1024 разницы с 75 не ощутил, а на 512 заметил. Хотя я без секундомера сидел)))
Много хорошо - тоже плохо. :-)
У KDV, в общем-то, это все расписано с обоснованием.
Теперь вкуривай "параметрические запросы", как их правильно использовать. Ну и в свойства компонет тошь стоит заглядывать.
Что не городить:
Код: pascal
1.
if  form1.pfibquery4.FieldByName('id').IsNull then



А юзать культурно, что-нить типа:
Код: pascal
1.
2.
3.
4.
if not form1.pfibquery4.Eof then
  begin
  ///Лопатим обновление
  end;
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279734
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

я сейчас плохую вещь скажу, но:

1) в 2014 году он написал временную и убогую затычку. Все - и он сам и контора - знали что это временная дрянь, которую надо как только представится случай заменить на что-то настоящее

2) это значит, что автор должен был готовиться к п-цу и заранее повышать квалификацию, а может и потихонку переписывать программу на ходу

3) это значит, что контора должна была либо искать на замену этой затычке нормальный "коробочный" продукт, либо нанять опытных программеров "со стороны" которые бы написали нужное. ЛИБО принять решение, что затычка становится основной программой и озаботиться обучением автора и оценкой кода самой затычки и его масштабируемости.

Ни он ни контора этого не сделали. Два года у них было, но не сделали ничего.

И пришла жопа.

И лучший вариант для них сейчас - "жопа об жопу и кто дальше".

Вот только автор судя по всему догадался на этой своей халтурке-затычке (которая по оределению могла в любую минуту взорваться) основать долгосрочные планы - ребенок, ипотека... Запасов на типовые минимум полгода жизни без работы нет.

Причём контора автора всерьёз не очень-то воспринимает (заслужено или нет - не знаю и судить не буду) судя по "вот тебе два гига на сервер и больше не получишь" (и это в критический момент).

Так что нормальный вариант для автора был бы - уволиться, пока его не уволили.

А волшебный - изучить все нужные концепции, образцы чужого кода и т.д.
Потому что если он не успеет найти волшебную палочку, то похоже как будто будет "вариант нормальный, часть вторая". Просто потому что начальству конторы надо будет найти крайнего.

Я в свое время на похожее натыкался. Без меня про**али и БД и ее резервные копии.
Потом все вместе восстанавливали БД с бумажных распечаток и прочих косвенных документов.
А потом меня же и уволили, потому что "написал такую БД, которая в момент перебоев с электричеством сама себя стёрла" и наняли контору со стороны чтобы всё переписать наново.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279737
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда уж нe .EOF а .IsEmpty

но как вариант - "а что? а вдруг?" - у него там что-то аналогичное left join и проверять надо именно IsNull

в общем, советы по частностям реализации я бы поостерёгся давать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279741
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

лучше ты ты этого не говорил, а то ведь начальство конторы где работает ТС случайно прочитают этот топик
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279742
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

прежде чем начать что-то переписывать прочитай как можно больше умных статей, доку по Firebird, книжки умные и продумай архитектуру, а то потом ещё раз будешь переписывать.

Это я уже вкурил. Но сначала надо с начальством обсудить "серьезно" перспективы. Ибо чето я "заикался" спецификацию менять. Ну а че городок маааленький. Сисадмином работал. Программером микроконтроллеров работал. PHP разработчиком работал. Теперь здрасти опять "Привет Дельфи Фиреберд и Яфил"... только начнешь вкуривать тему, то контора закроется, то директор сядет))), то Москва пожрет контору и поставит своих...

Я Interbase толком в 1998 изучал ито, как дипломный проект))) Так, несколько раз пересекался потом по жизни и тут вот "Здрасти. Учебник в зубы" ибо это уже не Delphi 4 и не Interbase 5)))

Вы меня еще стукните, что в 2014 на Firebird 2.1 (32 bit) залез))))
И кстати да, можно ли без особых последствий, с моей кашей, уйти хотябы на 2.5? Под 2.5 инструменты есть для контроля и просмотра получаемых сервером запросов... очень бы мне пригодилось.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279743
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogТолько вот вопрос почему на 1024 разницы с 75 не ощутил

а патамушта

Ariochчтобы ПОСЧИТАТЬ значения - нужно преставлять сколько и каких данных твоим программам реально нужно, и как сбалансировать 2гб оперативки между ВСЕМИ подключенными программами

ВСЕ программы (точнее все их подключения) вместе взятые при 1024 выжрали больше памяти, чем у сервера в наличии, и сервер упал в пейджинг со всеми вытекающими

а при 512 - кажется - пока 2ГБ хватало
но если подключений станет больше - всё равно в пейджинг упадёт :-)

смешно, но по приведённому запросу судя, для такого импорта суперсервер бы лучше работал, чем классики
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279747
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch, так ни чего постояннее, чем временное - нибываит!
До момента, пока жареный птиц (гы-гы) не клюнет.
:-))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279748
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIneAriochесли у них контора реально способна внезапно вырастать в сотню раз
- то ему придется переходить к параллельной обработке раньше или позже

Не передергивай.
Монстру он сваял в 2014 (начало кризиса) , а ща какбэ 2016 на дворе. И оборот мог вполне вырасти в разы.

Но-но, парниша! У меня все ходы записаны!!!

dgdogВсе было разработано, все работало как надо, но в один миг СИЛЬНО увеличилась нагрузка ( в сотни раз , фирма развивается и на такие нагрузки, я просто не расчитывал)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279750
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

если бы начальство читало такие форумы - они бы до такого не довели

а как подсидеть и свалить вину они и так знают лучше нас с тобой и всех форумов в мире
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279752
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

на 2.5 наверное можно, но осторожно. Список несовместимостей с 2.1 там не очень большой. На 3.0 с твоими знаниями пока пожалуй не стоит, хотя его SS мог бы вполне прилично крутится на 2GB оперативы.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279755
Го-стхи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть подозрение, что все тормоза (или хотя бы бОльшая их часть) - тупо из-за параметра даты в виде строки.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279756
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch , а ты не ходы записывай, а смотри по жисти.
Имею в практике случай, когда за месяц(!) было подключены несколько десятков точек по стране.
То есть практически мгновенно.
А прогеров, по понятным причинам, поставили перед фактом. (В какую пазишен - сам догадашься.)

Ни я, ни ты - не знаем реальной картины у ТС-а.
А делать обобщенные выводы из одного свидетеля, путающегося в показаниях, тошь не следует.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279757
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogИ кстати да, можно ли без особых последствий, с моей кашей, уйти хотябы на 2.5?

не попробуешь - не узнаешь

ОБЫЧНО все нормально, но кто ж знает что там у тебя где написано....

поставь параллельно к 2.1 ещё 2.5, перетащи пользователей security2.fdb (надо ли ее обновлять как-то при этом - не знаю), и попробуй из автозапука убрать 2.1 и поставить 2.5 - и молись потом

и не меняй структуру базы под 2.5 - иначе обратно на 2.1 же не вернешься
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279758
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogПод 2.5 инструменты есть для контроля и просмотра получаемых сервером запросов... очень бы мне пригодилось.

правда эти инструменты нагружают сервер больше, чем работа с самой БД

так чт оесли у теб сервер уже не шевелится, то с включенной трассировкой и просто помрёт
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279761
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

ты давай не наговаривай.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279763
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogибо это уже не Delphi 4 и не Interbase 5

раньше на Ibase.ru был для новчиков список литературы

и была там книжка то ли Шувалова то ли Шулимова - название какое-то типа "разработка приложений БД на Delphi для Interbase"

причём если на сайте упомяналась D5, то у меня дома лежит вообще её издание для Delphi 3

так вот, если бы вы ее прочитали - то такого кода, который вы привели, вы бы не родили.

у вас проблема не в версиях Дельфи, а в принципиальных моментах "что когда и зачем делать", а они с момента поядлвения SQL не менялись
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279766
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIneА делать обобщенные выводы из одного свидетеля, путающегося в показаниях, тошь не следует.

какие же они обобщённые, если они только про его котору и ни про что кроме?

а что до свидетеля - если ему не верить, то тогда уже и обсуждать нечего, тогда прав Мимопроходящий и просто надо брать попкорн и смотреть как один тролль всех этих умников кругами гоняет.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279774
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch... тогда прав Мимопроходящий...
А ты сможешь припомнить, когда МП был не прав? :-))))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279790
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch... и просто надо брать попкорн и смотреть как один тролль всех этих умников кругами гоняет.


Ээээ))) Парни, парни! Хорошь стебаться. Попкорн им подавай. Мож еще с пивом усядетесь перед мониторами в понедельник то)))

Короче 1024 буфера привели (а еще один из запросов переписал в препаре) к загрузке всех баз вместо 40 минут к 30 минутам. Да существенно. Спасибо за советы. Но пиковой загрузки сервера это не решило (конечно, ктоб сомневался)

Памяти во время загрузки из двух гиг ел 360-380 мб... пик 421 мб. И всё) Процессоры все 4 на 100%
Хмммм... почему-то просел этот запрос
Код: pascal
1.
2.
SELECT t1.ID,t1."DATE",t1.OTPRAV,t1.POLUCH,t1.SUMMA,t1.KLIENT,t1.DOGOVOR, t1.NALDOG,t1.DOCOBESP,t1.STATUSDOC,t1.KOMIS,t1.OTVETST,t1.COMMENT,t1.DATEISM,t1.KTO,t1.ind1,t1.ind2,t2.KL_PRIHOD as KL_PRIHOD,t2.KL_RASHOD as KL_RASHOD,t2.razn
    FROM FULLTABLE t1 LEFT JOIN (select KL_KLIENT_ID,  Sum(KL_PRIHOD) as KL_PRIHOD ,Sum(KL_RASHOD) as KL_RASHOD, Sum(KL_PRIHOD)-Sum(KL_RASHOD) as razn  from sdelka   group by sdelka.KL_KLIENT_ID) t2 ON t1.ID = t2.KL_KLIENT_ID  where ind2=1;




авторPlan
PLAN JOIN (T1 NATURAL, T2 SDELKA ORDER SDELKA_IDX3 INDEX (SDELKA_IDX3))

Adapted Plan
PLAN JOIN (T1 NATURAL, T2 SDELKA ORDER SDELKA_IDX3 INDEX (SDELKA_IDX3))

------ Performance info ------
Prepare time = 16ms
Execute time = 78ms
Avg fetch time = 4,33 ms
Current memory = 17 712 512
Max memory = 17 882 200
Memory buffers = 1 024
Reads from disk to cache = 978
Writes from cache to disk = 0
Fetches from cache = 156 920

Вот эта строчка это нормально?
Все сдаюсь ( на сегодня) Хотя если бессоница опять придет выползу из дома на IBase. ВСЕМ СПАСИБО
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279791
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdog...Процессоры все 4 на 100% ...

Процессоры ;-) Все четыре :-))) Ядра имел ввиду. Все. Все... нафиг базу, на сегодня)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279792
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog
Код: sql
1.
.... ON t1.ID = t2.KL_KLIENT_ID  where ind2=1;



а вот такой запрос, кстати, ЕМНИП в 2.5 уже не пройдёт

ибо если ты уж начал ярлыки давать - так давай всем и перед ind2 тоже должно стоять t2 либо t1

если не путают, конечно с другим похожим исправлением
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279794
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Arioch!
You wrote on 25 июля 2016 г. 16:12:02:

Arioch> в 2.5 уже не пройдётс чего бы?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279796
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

он не пройдёт только если этот филд одновременно есть у t1 и t2. Хотя лучше конечно всегда дописывать имя таблицы (алиаса) в запросах которых более 1 таблицы.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279852
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ребята, а вот подскажите если кому делать нефиг:
Значит кинулся переписывать Query под параметры а у меня вот так

begin БОЛЬШОЙ ЦИКЛ (ну пербираю базы)

begin цикл пербора "расходных сделок"
Код: pascal
1.
2.
3.
4.
5.
form1.pfibquery4.SQL.Text:='select * from SDELKA where PP='+quotedstr(String(pp))+' and RASHOD='+ summtmp +' and     DATA='+quotedstr(datetostr( zapros_tab.Получить(y).Дата)) +' and CAM='+quotedstr(zapros_tab.Получить(y).НазначениеПлатежа);

...//бла. бла. бла

form1.pfibquery4.SQL.Text:='select * from FULLTABLE where OTVETST='+ quotedstr(String( zapros_tab.Получить(y).ОрганизацияИНН));  


end цикл пербора "расходных сделок"
begin цикл пербора "прибыльных сделок"
Код: pascal
1.
2.
3.
4.
5.
form1.pfibquery4.SQL.Text:='select * from SDELKA where PP='+quotedstr(String(pp))+' and PRIHOD='+ summtmp +' and     DATA='+quotedstr(datetostr( zapros_tab.Получить(y).Дата)) +' and CAM='+quotedstr(zapros_tab.Получить(y).НазначениеПлатежа);

...//бла. бла. бла

form1.pfibquery4.SQL.Text:='select * from FULLTABLE where OTVETST='+ quotedstr(String( zapros_tab.Получить(y).ОрганизацияИНН));  


end "прибыльные сделки"
end БОЛЬШОГО ЦИКЛА

Т.е. я 4 раза использую pfibquery4 с разными запросами внутри большого цикла. И как быть с параметризацией? Заводить 4 разных Query??? Или?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279858
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЗаводить 4 разных Query???
думаешь, на форме они все не удержатся и попадают вниз?

зы. quotedstr(String(pp)) ты так на параметры и не заменил...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279870
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЗаводить 4 разных Query???
Да. Но не вижу зачем их четыре: запросы к FULLTABLE идентичны.

И я же сказал: убери напрочь звёздочку. Она может тормозить больше чем всё остальное
вместе взятое. Выбирай только те поля, которые абсолютно необходимы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279885
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокdgdogЗаводить 4 разных Query???
думаешь, на форме они все не удержатся и попадают вниз?

зы. quotedstr(String(pp)) ты так на параметры и не заменил...

да удержатся конечно))) я думал чем меньше компонентов, тем меньше памяти пожру. Учился на 486х))) Привычка мать ее.

вот тут не понял "зы. quotedstr(String(pp)) ты так на параметры и не заменил..." так менять на параметры - ВСЕ или ничего.
Я так с сонных шар вкурил что: Prepare дает реальное преимущество. Сервер строит Plan и держит его в кэше до следующего выполнения подобного запроса Query. Логично. Больше не тратим времени на построение Плана. Мне нравится идея))) В принципе только сейчас понял о какой прибавке к производительности толковал Arioch . Теперь бы применить правильно... и не запутаться в замене pFibQuery4.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279887
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovdgdogЗаводить 4 разных Query???
Да. Но не вижу зачем их четыре: запросы к FULLTABLE идентичны.

И я же сказал: убери напрочь звёздочку. Она может тормозить больше чем всё остальное
вместе взятое. Выбирай только те поля, которые абсолютно необходимы.


"Не ори на мать!" ;) Все поля... все, все, все поля нужны. Заменить звездочку на перечень всех полей? Получу бонусы? (если можешь ответь, нет значит буду посвободней порою инфу по этому поводу)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279889
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogвсе, все, все поля нужны.
Зачем? Ты же только на уникальность проверяешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279894
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovДа. Но не вижу зачем их четыре: запросы к FULLTABLE идентичны.


Точна!!! Лоханка я!!! Три.

А вот еще вопрос по параметризации. (Не догоняю)

Занчит:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
//перед циклом                                       
pfibquery4.SQL.Text:='select * from FULLTABLE where OTVETST=:org'
// циклы пошли
...
pfibquery4.Prepare;
pfibquery4.ParamByName( 'org' ).AsString := String( zapros_tab.Получить(y).ОрганизацияИНН);                                       pfibquery4.ExecQuery;
...
// циклы закончены


Так как-то? На живой базе тяжко эксперементировать)))

pfibquery4. Закрывается где-нибудь? т.е. pfibquery4.close или внутри цикла это не обязательно? Prepare - exec, Prepare - exec?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279897
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovdgdogвсе, все, все поля нужны.
Зачем? Ты же только на уникальность проверяешь.


А?! нет извини, я тебя в блуд ввел. Дальше логика проверки справочников, проверка на внесение уже такой проводки ручками с ВАРИАНТАМИ проверки на человеческий фактор... найдена В ПРИНЦИПЕ похожая проводка МАЯЧИМ бухгалтеру=отмечаем пусть сами разбираются "что это было? Дубль? Чистая проводка? Ошибка"... ну короче, сейчас это не суть и обрабатывается на клиенте, к серваку толком не лезет. Читсо получает в этом селекте все что нужно (а нужно все)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279898
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТеперь бы применить правильно... и не запутаться в замене pFibQuery4.

Лови простой пример.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with pFIBQuery1
 do begin
     SQL.Text:='SELECT F1, F2 FROM TABLE1 WHERE F0=:P1;';
     Prepare;
     for I:=1 to 10
      do begin
          ParamByName ('P1').AsInteger:=I;
          ExecQuery;
          while not eof
           do begin
               //здесь - код работы с результатами запроса
               Next;
              end;
          Close;
         end;
    end;
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279899
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И опять же, раз пошла такая пьянка вот выполнил я pFibQuery
Дальше у меня
Код: pascal
1.
if form1.pfibquery4.FieldByName('OTVETST').AsString<>Trim(String( zapros_tab.Получить(y).ОрганизацияИНН)) then



а на FieldByName в цикле Arioch ругается как компилятор при делении на ноль. И куда за цикл я это выкину? Или обращаться к номеру поля? pFIBQuery4.Fields[3].asString? так чтоли?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279900
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛюбезныйавторТеперь бы применить правильно... и не запутаться в замене pFibQuery4.

Лови простой пример.


Очень любезно))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279903
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И касательно FieldByName: если текст запроса препарируется и содержит перечисление полей, лучше обращаться к полю по индексу, а не через имя: Fields [0].AsString и.т.д. Тоже будет прирост производительности, пусть и не особо большой.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279905
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogИ куда за цикл я это выкину?
Забей пока. Это понадобится когда твоё приложение начнёт жрать больше ЦПУ чем сервер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279906
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТвоюБогаДушуМатьЧерезКоромыслоРастудытьТебяВКачель... да тут все... ВСЕ перепахивать надо. Дешевле выкинуть весь "импорт" и пересобрать модуль по новой. ((( беда.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279908
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С самого начала нужно писать максимально просто, чтобы не путаться в коде. Разнес бы логику хотя бы на процедуры (пусть даже на вложенные) - тогда и тебе, и нам стало бы гораздо понятнее.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279910
igs123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdog,

а еще лучше и экспорт дописать (как советовали ранее)
с 1С-ки той же сделать обработкой выгрузку в текстовый файл, желательно единого формата с другими файлами...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279913
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛюбезныйС самого начала нужно писать максимально просто, чтобы не путаться в коде. Разнес бы логику хотя бы на процедуры (пусть даже на вложенные) - тогда и тебе, и нам стало бы гораздо понятнее.
Да как это писалось?
- А нам вот табличка нужна. Мы бы туда разносили. Простенькая.
- Ладно.
... месяц
- а вот нам бы суммы считать и формулы как в Ексели
- ну ок.
...месяца два прошло
- а можно чтоб из выгрузок банков само вставало. вот файлы из банков.
- в принципе. Делать в выходные нечего... сделаю.
... прошло полгода
- а вот. 1Сник сказал, что можно из 1С напрямую как-то перетаскивать...
- угу. только я вообще не помню исходников, я там сам не разберусь уже...
... через месяц
-Нам сводная нужна.
...
- а сделай, чтоб мы сами новые 1Ски прикручивали...
...
- а че так медленно? А выгрузку в ексцель? А вот директору форму с отчетом, чтоб он в вебе видел.

ПС сейчас сижу смотрю на этого франкинштейна - это пи*дец. Какие-то невменяемые куски. Как ЭТО вообще работало 2 года... х.з. На некоторые вещи смотрю и хочется спросить "это вот точно Я писал да? Трезвый да?"

Сам этой ж*пе не рад, но увольняться не вариант, только не сейчас. Херня, ребзя прорвемся
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279914
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igs123dgdog,

а еще лучше и экспорт дописать (как советовали ранее)
с 1С-ки той же сделать обработкой выгрузку в текстовый файл, желательно единого формата с другими файлами...

В 1С я полный NULL даже не ноль. 1Сник запрос дал. COMсоединением подрубаюсь, получаю данные. Если выгрузка будет делаться по кнопке(пользователем) то этого никто делать не будет ТОЧКА. Если выгружать опять же подрубаясь COMом и командуя 1С то смысла не вижу, напрямую получать данные или в из файла их брать. Если не прав или недопонял пните в нужную степь.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279917
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogТвоюБогаДушуМатьЧерезКоромыслоРастудытьТебяВКачель...
- Да-да, это реплика из лога FB.
:-)))

dgdog да тут все... ВСЕ перепахивать надо. Дешевле выкинуть весь "импорт" и пересобрать модуль по новой. ((( беда.
О чём тебе и грили 3 страницы форума назад.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279919
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЕсли выгрузка будет делаться по кнопке(пользователем) то этого никто делать не будет ТОЧКА.

Ну так это уже будет проблема бюстгалтерш.
Хотя... Они в 110% случаях тупые и упертые: - Делать так и не иначе!
А значить будут. :-)
Во всяком случае это проблемы главбушки - гонять своих, а не отдела ИТ...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279921
igs123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdogigs123dgdog,

а еще лучше и экспорт дописать (как советовали ранее)
с 1С-ки той же сделать обработкой выгрузку в текстовый файл, желательно единого формата с другими файлами...

В 1С я полный NULL даже не ноль. 1Сник запрос дал. COMсоединением подрубаюсь, получаю данные. Если выгрузка будет делаться по кнопке(пользователем) то этого никто делать не будет ТОЧКА. Если выгружать опять же подрубаясь COMом и командуя 1С то смысла не вижу, напрямую получать данные или в из файла их брать. Если не прав или недопонял пните в нужную степь.

Если формат исходных данных будет единым у тебя как минимум в 2 раза код уменьшится и это главное.
Ну и External Table есть такое в Firebird http://www.ibase.ru/impexp/
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279922
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LInedgdogЕсли выгрузка будет делаться по кнопке(пользователем) то этого никто делать не будет ТОЧКА.

Ну так это уже будет проблема бюстгалтерш.
Хотя... Они в 110% случаях тупые и упертые: - Делать так и не иначе!
А значить будут. :-)
Во всяком случае это проблемы главбушки - гонять своих, а не отдела ИТ...

Завтра провентилирую этот вопрос с начальством, но не распинать нам филиалы, посредников и т.п. многого объяснить не могу. Фигня в том, что база работает. Хреново но работает. И это по большому счету всех устраивает, "только скорость импорта нннадА". Зря и не дальновидно прогнулся под самостоятельный импорт в "одно рыло". (не ожидал такого объема) Теперь переломить ситуацию сложно. Если колом программка встанет "Кто виноват?" хммм... Перевесить импорт на бухов "а зачем, работает же... ну медленно, но работает"

И да очередной вопрос. Яндекс чето пять минут ответить не может а вы тут шустрые да и в полной теме: в строковую queryprih.ParamByName('pp') передаю просто переменную pp или quotedstr(pp)?
(везде на поверхности примеры с Integer)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279925
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
igs123Ну и External Table есть такое в Firebird http://www.ibase.ru/impexp/

Башка не варит, но если я правильно понял то это самый удобный вариант перекинуть данные. Но мне нужна промежуточная проверка запись идет в базу или нет. Эта логика реализована на клиенте (встроенными процедурами мне такое не осилить).
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279928
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторв строковую queryprih.ParamByName('pp') передаю просто переменную pp или quotedstr(pp)?
Если ты хочешь, чтобы у тебя в базу записалось значение с кавычками (так лучше не делать) - передавай quotedstr. Если нет - просто переменную.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279931
igs123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdogigs123Ну и External Table есть такое в Firebird http://www.ibase.ru/impexp/

Башка не варит, но если я правильно понял то это самый удобный вариант перекинуть данные. Но мне нужна промежуточная проверка запись идет в базу или нет. Эта логика реализована на клиенте (встроенными процедурами мне такое не осилить).

Тогда забей на ExtTbl

Но вариант с единым форматом, на мой взгляд, самый оптимальный..

Т.е. читаешь все источники данных - записываешь в один суммарный файл
А потом уже пробегаешь по нему, делаешь свои проверки и пишешь что надо в базу...

И (если ничего не путаю) - желательно в одной длинной транзакции.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279934
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog в строковую queryprih.ParamByName('pp') передаю просто переменную pp или quotedstr(pp)?

Варианта ашь три:
1. queryprih.ParamByName('pp').AsString='пи-пи';

2. queryprih.ParamByName('pp').AsString=pp;

3. queryprih.ParamByName('pp').AsString=Квери2.ФиелдБуНаме('Бла-бла').AsString;

Привыкай к явному приведению типов в запросе и в полях в БД.

Почему так - хоть убей не помню. :-)

Вариант:
queryprih.ParamByName('pp').AsString= quotedstr(pp)
засунет в БД строку вместе с кавычками.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279936
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot igs123]dgdogпропущено...

Т.е. читаешь все источники данных - записываешь в один суммарный файл
А потом уже пробегаешь по нему, делаешь свои проверки и пишешь что надо в базу...

И (если ничего не путаю) - желательно в одной длинной транзакции.

Трабл не как взять данные из баз. МОЯ проблема это страшная туча запросов к базе для проверки каждой проводки. ЦП вешается.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279943
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogВсе поля... все, все, все поля нужны. Заменить звездочку на перечень всех полей? Получу бонусы?
Ладно, поделюсь мега_хакингом. :-)

Есть в одной Табле почти 600 полей.
В Дельфе сваял глобальную переменную, типа Full_Colum_Names:='Colim_1,Colim_2,... Colim_J ';

И потом курю бамбук:
form1.pfibquery4.SQL.Text:='select '+Full_Colum_Names+' from FULLTABLE where '.

Так как в процессе жизни Табли кол-во и наименование полей менялось не однократно.
И править их приходилось только в одном месте, а не елозить по всему коду.
Ну и меньше кнобкотыкать приходится с меньшим числом очепяток. :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279945
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogМОЯ проблема это страшная туча запросов к базе для проверки каждой проводки. ЦП вешается.
Это - еще не проблема. :-)
Тебя еще за индексы не крутили.
А так, мирно дают ляписинку. ;-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279948
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЦП вешается.
Как тебе уже сказали, ЦПУ вешает не само выполнение запросов, а их препарирование. И,
вполне вероятно, старт-коммит транзакций. Избавишься от этого - избавишься от проблемы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279952
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LInedgdogВсе поля... все, все, все поля нужны. Заменить звездочку на перечень всех полей? Получу бонусы?
Ладно, поделюсь мега_хакингом. :-)


Вот хакнул, так хакнул)) Разумное зерно есть, но вот в производительности твоя переменная против звездочки даст ли прибыль? Будем посмотреть.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279953
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIne,

Понял да. уже выкинул за циклы два главных Query. Тестю. Ошибок не сыпится иладно. А как отработает пусть утром бухи смотрят. (ну базу закопировал конечно)

Хм... ребят, а вот базу же можно тупо как файл скопировать в резерв (при выключенном сервере)? Понятно с мусором будет и т.п. Но как самый быстрый вариант прокатит? Жить будет?

Блин, я сегодня столько узнал про Firebird...))) Ясно это верхушка айсберга, но все равно
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279954
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog... но вот в производительности твоя переменная против звездочки даст ли прибыль?...
...Он над нами издевался, ОдноЦешник, что возьмешь...
(R)емейк от мну.
:-))))


Или ты думаешь, что всё написанное в коде после form1. - выполняется на FB-сервере? :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279955
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov... старт-коммит транзакций. Избавишься от этого - избавишься от проблемы.


автостарт транзакций и автокоммит компонентами, я так понял зло? Но не осилю сегодня перебирать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279957
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogавтостарт транзакций и автокоммит компонентами, я так понял зло?

Это не зло. Это полный П.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279964
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogА как отработает пусть утром бухи смотрят. (ну базу закопировал конечно)

Ну так рихтовкой как раз и надо заниматься, когда на сервере ни кого нету.
Тогда все изменения будут очам_видные.
А еще лучше, хотя про это не заслужено забыли по не надобности того гурам, иметь с боку в свое мононопольное юзание сервер-профилировщик.
Собраный из какого-нить старого компо-хлама, который всегда есть у атишников.
Ну то железо, которое выкинуть жалко и в ход пустить не куда.
На нем и будут очевидны ЛЮБЫЕ изменения в производительности, как в плюс, так и в минус.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39279965
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит вынес 2 главные (саме частые) Query за цикл. Prepare за циклом. В цикле присвоить параметры Exec проработал Close. Так не так не понял. В работе импорта заметны реальные провалы ЦП уже не все время 100%. Уже хорошо. СПАСИБИЩЕ всем. (но пока правил нарушил логику ;-) задвоились часть проводок) Откатываю базу и спать. Завтра выкидывать все Query за цикл и разбираться с Транзакциями. Всем спасибо. Я СПАТЬ.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280006
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ цикле присвоить параметры Exec проработал Close. Так не так не понял.
Плохо.

Теперь вкратце - пример с параметрами для Insert.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with pFIBQuery1
 do begin
     Transaction.StartTransaction;
     SQL.Text:='INSERT INTO T1(F1, F2) VALUES (:P1, :P2);';
     Prepare;
     for I:=1 to 10
      do begin
          ParamByName ('P1').AsInteger:=I;
          ParamByName ('P2').AsInteger:=5;
          ExecQuery;          
         end;
     Transaction.Commit;
    end;



Что тут важно:
1. Компоненты транзакций на чтение и запись должны быть разными. Так же лучше разделить компоненты Query. К примеру, к одной транзакции привязываешь все читающие Query, а транзакций на запись лучше сделать по одной на компонент Query.
2. Компоненту транзакции на чтение хорошо бы присвоить классические параметры читающей транзакции: read read committed rec_version nowait. Это позволит стартовать ее всего один раз сразу после коннекта к базе данных и больше не трогать. Такая транзакция будет видеть все закоммиченные изменения на момент открытия SQL-запроса.
Пока все.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280034
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЛюбезныйавторВ цикле присвоить параметры Exec проработал Close. Так не так не понял.
Плохо.
...
1. Компоненты транзакций на чтение и запись должны быть разными. ...
Пока все.

Да. Ну, че вилять то? Или врать?! Транзакций всего две. Одна на запись другая на чтение. Компоненты Pfibdataset и pFibQuery кончено раскиданы (по принципу эта Query только читает поэтому Read) по этим двум транзакциям. Вот. И вполне себе хватало пока базы грузились последовательно. При переделке в паралельную загрузку... получились АТОМНЫЕ грабли. Ночью пытался почитать про транзакции (дальше можно смеяться) С удивлением для себя понял, что транзакций может быть НЕ ДВЕ прописанные в Database :) Нет ну самому смешно.

Но ребят я на ЖарПтице только дипломную программку писал))). Я не собирался быть админом Firebird и разработчиком такого монстра. Этож вспомогательная утилитка должна была быть и не больше. Но "партия сказала надо", "идея нормальная, PHP направление закрылось, хочешь остаться вот и рули этой темой".

Ушел читать про транзакции... тяжело. Тяжело разобраться во всем и сразу. И в правильных настройках сервера и в правильном написании кода... транзакции, параметризация, индексы (тригеры, процедуры - как-то легче, помню чтоли?!!)... Примеры смотришь все просто, на своего монстра начинаешь переносить пи*дец. А база то уже работает. А бухи остановить её на минуту не дают. Пью вместо пива Афобазол и наплевав на все тычки и подгонки пытаюсь разобраться, прежде чем опять что-то дописывать переписывать. Ибо или я остаюсь на сопровождении нормального продукта... или ну его нафик ищу работу, пусть приходит грамотный чел и переписывает с NULL))). Фигня, прорвемся. Не в такие дали шагали.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280038
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный, не согласный я. Нужно так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
 Query.Transaction.StartTransaction;
 Try
// тут в цикле присвоение параметров Query и Query.ExecQuery  
  Query.Transaction.Commit;
 Except 
  Query.Transaction.Rollback;
// тут обработка ошибки
 End;
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280046
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikeDDЛюбезный, не согласный я. Нужно так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
 Query.Transaction.StartTransaction;
 Try
// тут в цикле присвоение параметров Query и Query.ExecQuery  
  Query.Transaction.Commit;
 Except 
  Query.Transaction.Rollback;
// тут обработка ошибки
 End;



вот тут подробней бы.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Query.sql.text:='select бла бла бла =:KinDzaDza'; \\здесь?
 Query.Transaction.StartTransaction;
Query.prepare; \\так?
 Try
 While not... do 
 BEGIN
   Query.Parambyname('KinDzaDza').asstring:='Ку';
   Query.ExecQuery;
    if query.fields[0].asstring = бла бла 
         begin
         end;
     Query. close; \\ так? Здесь? в цикле?
  END;
// тут в цикле присвоение параметров Query и Query.ExecQuery  
  Query.Transaction.Commit;
 Except 
  Query.Transaction.Rollback;
// тут обработка ошибки
 End;

?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280049
igs123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot dgdog]Любезныйпропущено...

тригеры, процедуры - как-то легче, помню чтоли

не претендую на профи по FB, но....

еще один вариант (без кучи мелких выборок на клиента)

DROP TABLE FOR_LOAD (если есть)
CREATE TABLE FOR_LOAD (со всеми полями какие ты будешь заливать + check1...N, Check_SUM)
Заливка исходных данных
Потом либо в процедуре бежать по всему набору и делать проверки, либо с клиента вызывать
(предварительно создав индексы)

UPDATE FOR_LOAD SET check_1=1 WHERE условие при котором данные не должны заливаться
UPDATE FOR_LOAD SET check_N=1....
после всех проверок

UPDATE FOR_LOAD SET Check_SUM=check_1+....+check_n

INSERT INTO ... FROM FOR_LOAD WHERE Check_SUM=0
ну либо UPDATE по какому-нибудь признаку

а потом с клиента опять же по результатам проверок - можно результаты вытащить (что залилось, что обновилось, какие где ошибки и т.д.) и отправить кому следует
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280058
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot igs123]dgdogпропущено...


не претендую на профи по FB, но....

еще один вариант (без кучи мелких выборок на клиента)

DROP TABLE FOR_LOAD (если есть)
CREATE TABLE FOR_LOAD (со всеми полями какие ты будешь заливать + check1...N, Check_SUM)
Заливка исходных данных
Потом либо в процедуре бежать по всему набору и делать проверки, либо с клиента вызывать
(предварительно создав индексы)

UPDATE FOR_LOAD SET check_1=1 WHERE условие при котором данные не должны заливаться
UPDATE FOR_LOAD SET check_N=1....
после всех проверок

UPDATE FOR_LOAD SET Check_SUM=check_1+....+check_n

INSERT INTO ... FROM FOR_LOAD WHERE Check_SUM=0
ну либо UPDATE по какому-нибудь признаку

а потом с клиента опять же по результатам проверок - можно результаты вытащить (что залилось, что обновилось, какие где ошибки и т.д.) и отправить кому следует

Нагрузка на сервер в этом случае будет меньше? Хммм... но запилить все проверки в хранимых. Для меня это АД. Но вариант конечно
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280059
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igs123,

зачем DROP? Ты подумал как это будет работать в многопользовательской среде? Уже давно есть GTT. Прежде чем советовать неплохо бы самому чуток разбираться в FB.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280061
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

ты его не слушай. Он тебе сейчас такого насоветует, что работать ещё хуже будет.

dgdog Хммм... но запилить все проверки в хранимых процедурах

Да, но только вместо DROP/CREATE TABLE использовать GLOBAL TEMPORARY TABLE
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280078
Го-стхи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIneЛадно, поделюсь мега_хакингом. :-)

Есть в одной Табле почти 600 полей.
В Дельфе сваял глобальную переменную, типа Full_Colum_Names:='Colim_1,Colim_2,... Colim_J ';

И потом курю бамбук:
form1.pfibquery4.SQL.Text:='select '+Full_Colum_Names+' from FULLTABLE where '.

Так как в процессе жизни Табли кол-во и наименование полей менялось не однократно.
И править их приходилось только в одном месте, а не елозить по всему коду.
Ну и меньше кнобкотыкать приходится с меньшим числом очепяток. :-)
Минус №1. Надо менять константу при появлении новых полей
Минус №2. Такая портянка дольше передается по сети
Минус №3. Такая портянка дольше препарится сервером

А в чем плюсы данного решения?

ТС, ты главное не вздумай сделать что-то вроде Query.ParamByName('SomeDate').AsString := DateToStr(aDate). Ставлю на то, что это и есть причина твоих тормозов.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280094
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Го-стхи ТС, ты главное не вздумай сделать что-то вроде Query.ParamByName('SomeDate').AsString := DateToStr(aDate). Ставлю на то, что это и есть причина твоих тормозов.


Ээээ... а ты нормально на стуле сидишь? Ну тогда вооот:

Код: pascal
1.
 form1.pfibquery4.SQL.Text:='select * from SDELKA where PP='+quotedstr(pp)+' and Prihod='+ summtmp+' and DATA='+quotedstr(datetostr( zapros_tab.Получить(y).Дата));

Было. Дату видишь))))
Правда, вчера местные товарищи с шутками прибаутками меня побили (даже ногами) и я ночью перебил: стало
Код: pascal
1.
2.
3.
4.
5.
queryprih.ParamByName('pp').asstring:=pp;
queryprih.ParamByName('Prihod').asstring:=summtmp;
queryprih.ParamByName('Data').AsDate:=zapros_tab.Получить(y).Дата;
queryprih.ParamByName('cam').asstring:=zapros_tab.Получить(y).НазначениеПлатежа;
 queryprih.ExecQuery;


Ну и большинство Query в этом духе оформил, но еще не все, но самые частые. Да. Чуть, чуть процессор разгрузил. Но очень чуть, чуть))) Транзакции надо разбирать... но это атомный пи*ц. Пью кофе, курю и думаю переписывать модуль заново. И распаралелить всё сразу
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280122
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogа на FieldByName в цикле Arioch ругается как компилятор при делении на ноль

на ParamByName тоже

так что поправим

и еще нa ошибку внутри цикла заложимся - добавим закрытие запроса даже в случае exception

Любезный
Лови простой пример.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
var Param_F0: TParam;

with pFIBQuery1
 do try
     SQL.Text:='SELECT F1, F2 FROM TABLE1 WHERE F0=:P1;';
     Prepare;
     Param_F0 := ParamByName ('P1');
     for I:=1 to 10
      do begin
          Param_F0.AsInteger:=I;
          ExecQuery;
          while not eof
           do begin
               //здесь - код работы с результатами запроса
               Next;
              end;
          Close;
         end;
    finally
       Close;
    end;
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280126
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogigs123Ну и External Table есть такое в Firebird http://www.ibase.ru/impexp/
Башка не варит, но если я правильно понял то это самый удобный вариант перекинуть данные.

Это сырые бинарные данные.

С одной стороны, если ты микроконтроллеры программировал, то разобраться сможешь.

С другой - зачем делать сложно, если можно просто :-)
Чуть что напутаешь - отлаживать и искать ошибку тольк осложнее будет

В общем, лично я бы не советовал тебе завязываться на сырые неоформленные данные, сиречь External Tables

Хотя смотри сам, конечно
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280135
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog Запускается десять разных клиентов которые тащат конкретные данные из конкретных источников. Но мне каждую строчку надо сверить с моей базой. Они наваливаются разом ... и привет ЦП.
А зачем все разом? По одному нельзя? Ну или по три максимум :)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280140
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.. и потом, если все это делается автоматически (оператор не учавствует в разборе данных), и днем начинаются проблемы с реально работающей бухгалтерией, почему бы не запускать все это ночью?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280144
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogИ это по большому счету всех устраивает, "только скорость импорта нннадА".

Так пусть выбирают, им надо "скорость импорта" или чтобы "ничего не менять".
Только пусть они официально сами сделают выбор, а ты просто исполнишь.

PS. Кстати, "нажимать на клиентах кнопку" может быть и не надо. Сделай службу (WinNT Service) котрая всегда у них работает и "ждёт сигнала" - чтобы твой сервер импорта сам её на клиентах запускал когда надо.

Зря и не дальновидно прогнулся под самостоятельный импорт в "одно рыло". (не ожидал такого объема)
Теперь переломить ситуацию сложно.

И никто не ожидал. Теперь либо вертать объёмы обратно - либо приспосабливаться.

Говорят, что у китайцев слово "кризис" сопадает со словом "возможности" :-)
Сейчас твоя прога - "дитя природы, хошь дурное - но дитя", все её терпят, но всем она чужая.
Админ оперативку на сервере зарезал, бухи хотят чтобы их не трогали но все само работало и т.д.

На самом деле ТОЛЬКО сейчас ситуацию можно переломить.
Только когда программа начинает захлёбываться и встаёт работа всей конторы - можно поднять статус этой приблуды до законной дочери, до важной части необходимой инфраструктуры. До того, в чем заитероесована и за что отвечает ВСЯ фирма.

А вот пока "котлеты не подгорали" так и повода небыло ситуацию пересмотреть.
И когда исправишь - снова повода не будет.

Только когда всем жмёт, всем стало тесно - только в такой момент и осознается "шкурой" нужность программы и только в такой момент ситуацию можно пытаться менять.

Перевесить импорт на бухов "а зачем, работает же... ну медленно, но работает"

Вот и пуст ьони под этим подпишутся.

Если колом программка встанет "Кто виноват?" хммм...

Бухи - они категорически потребовали ничего не менять, несмотря на нарастающие тормоза и мои предупреждения.
...конечно если тебе удастся подписать их на какой-то конкретный и зафиксированный ответ, см. выше.
...а это тебе не удастся, если ты не "переломишь ситуацию" и не эмансипируешь программу до официального статуса обще-фирменно-важной.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280149
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIneЕсть в одной Табле почти 600 полей.
В Дельфе сваял глобальную переменную, типа Full_Colum_Names:='Colim_1,Colim_2,... Colim_J ';

И потом курю бамбук:
form1.pfibquery4.SQL.Text:='select '+Full_Colum_Names+' from FULLTABLE where '

DRY principle, это архитектурно

Но...

1) почему переменную, а не константу ? ненадёжно...

2) почему только поля вынес в константу? если такая пьянка, то уж выносить начиная с select'a и заканчивая 'from FULLTABLE' - уж эти волшебные слова ещё реже меняются, чем столбцы :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280153
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogа вот базу же можно тупо как файл скопировать в резерв (при выключенном сервере)? Понятно с мусором будет и т.п. Но как самый быстрый вариант прокатит?

Можно.

Но я выше тебе уже говорил про nbackup - таки покури его.
Получишь почти такую же скорость копирования - но при работающем сервере.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280155
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйТеперь вкратце - пример с параметрами для Insert.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with pFIBQuery1
 do begin
     Transaction.StartTransaction;
     SQL.Text:='INSERT INTO T1(F1, F2) VALUES (:P1, :P2);';
     Prepare;
     for I:=1 to 10
      do begin
          ParamByName ('P1').AsInteger:=I;
          ParamByName ('P2').AsInteger:=5;
          ExecQuery;          
         end;
     Transaction.Commit;
    end;



ну про ParamByName я уже на ноль поделил, теперь буду про транзакции и ошибки.

не надо вот так делать! во время работы программы могут быть оишбки, в том числе и на подтверждении транзакции.

Так что схема выглядит слегка по другому, в самом простом варианте так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
     Transaction.StartTransaction;
     try
        (*** тут что-то делаем с запросами  ***)

       Transaction.Commit;
    except
       Transaction.Rollback;
       raise;
    end;

[/quot]


2. Компоненту транзакции на чтение хорошо бы присвоить классические параметры читающей транзакции: read read committed rec_version nowait

Этак ты его и на схему с двумя соединениями подпишешь DD

В общем совет правильный, но мне кажется пока не актуальный. Достаточно будет просто явно сделать разумное ручное управление вокруг логических блоков.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280160
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S.G... и потом, если все это делается автоматически (оператор не учавствует в разборе данных), и днем начинаются проблемы с реально работающей бухгалтерией, почему бы не запускать все это ночью?

Долго объяснять. И запарился объяснять на каждой странице, если честно. Загрузка идет 3-5-8 раз в день. Данные нужны СРОЧНО!СЕГОДНЯ! СЕЙЧАС!

По три базы разом отрабатывает в легкую. Но это порядка 2-3 часов. Сам понимаешь, 3 раза импорт по 3 часа... бухам работать вообще некогда. Время же уходит еще и на подключение к б.д. (отбой, ошибка, занят, нет инета, связь порвалась). А так по 10 штук хоть разом конектятся, уже плюс (верней, минус минуты).30 - 40 минут против 2х-3х часов.

Пошел к задаче с другой стороны (за подсказки по Дельфи, Жарптице спасибо). Но решил разрулить сначала вообще общий принцип работы. Жду 1Сника может даст выгрузку в файл автоматом. (тогда будет проще. Утилита видит файл появился. Хватает его в фоновом режиме и разбирает) Таким макаром обойду загрузку не изменившихся баз и херову тучу не нужных проверок уже имеющихся платежек. Опять же надо выяснить есть ли в 1С датавремя последних изменений проводки?! В мыслях хранить дату последнего импорта по базе и хватать только измененные проводки... Ну короче, начал работу по импорту заново.

ПС Вот так вот. Подхалтурил в свое время, "срубил пару штук по легкому". Атомный звиздец))))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280163
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный Это позволит стартовать ее всего один раз сразу после коннекта к базе данных и больше не трогать.

казалось бы...

на самом деле в некоторых условиях такая транзакция тоже течет ресурсами - например БЛОБами

так что хотя бы пару раз в час надо "предёргивать" и "вечную" транзакцию :-)

и даже если сейчас программы автора может быть по любому дольше и не работают всё равно, но на будущее ему лучше опасные советы давать с примечаниями :-) он ведь сейчас мотает это на ус как универсальный и всегда правильный рецепт на будущее
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280182
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog думаю переписывать модуль заново. И распаралелить всё сразу

а вот это правильно

безумству храбрых....

если ты себя ещё голову не расколошматил об стену дам тебе всеьма рискованный совет - попробуй найти и прочитать хорошую статью про Map-Reduce. Ну просто чтобы голову себе засрать распахнуть двери восприятия посмотреть на свои задачи под другим углом, научиться планировать программу по другому, как поток данных, а не поток действий.

На функциональное программирование не обращай внимание - оно тебе тут не нужно и не осилишь. Обращай внимание на саму логику обработки потока данных, когда вместо типового процедурного "взять элемент данных, провести его через 10 операций, положить результат в копилку, взять второй элемент данных..." выстраивается конвейер "взять первое действие, провести через него все элементы данных; взять второе действие и провести через него все результаты первого действия; взять третье действие". И на то, что "неестественное" для процедурников и очень неэкономная по памяти организация программы в некотрх условиях оказывается и гораздо проще-понятнее и гораздо быстрее, чем "нормальная" оргaнизация.

Ну а если oт MapReduce вернуться на землю, то напоминаю про 19450595

Чисто совет как в несколько раз уменьшить количество запросов и транзакций - в своих клиентах сразу группируй данные по разным PP. Или через интерфейс источника данных, если можно и достаточно быстро, или (например при вычитке текстовых файлов) - через временные файлы/таблицы.

При этом для каждого отдельного PP выясняешь или запоминаешь минимумы и максимумы Даты и Расхода (или любых других столбцов по которым ты запросы делаешь) и вчитываешь с основного сервера не одну единственную запись, а сразу целую срезку, табличку под этот PP. 19450595

В результате у тебя количество запросов (и автоматических транзакций) будет количество разных PP, а не как сейчас - перемножение количеств PP и Расходов и Дат. В несколько раз меньше, если не порядков.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280189
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog Подхалтурил в свое время, "срубил пару штук по легкому". Атомный звиздец))))

Какая же это халтура, если ты там корни пустил ?
Халтура - это "сунул, вынул и пошёл" ( этические вопросы обсуждать не будем ).
А ты не пошёл. А ты там поселился. В своей же халтуре.
И при этом фактически приняв, что у тебя с этой программой теперь уже серьёзные отношения, не стал о ней по настоящему заботиться.

"Вот это мы с Вованом тормознули" (с) КВН
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280191
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйЧто тут важно:
Ни то ни другое для пакетной обработки не важно. Это советы исключительно для
интерактивных приложений.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280199
Го-стхи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdogНу и большинство Query в этом духе оформил, но еще не все, но самые частые. Да. Чуть, чуть процессор разгрузил. Но очень чуть, чуть))) Транзакции надо разбирать... но это атомный пи*ц.
Надо смотреть, сколько за весь цикл выполняется запросов и каких. Если, к примеру, для каждой локальной базы крутится цикл по 100000 записей, для каждой из которых в рамках своей персональной транзакции выполняется запрос на выборку - тут параметры особо не помогут, конечно всё будет тормозить.
Возможно, стоит рассмотреть вариант сделать предвыборку из главной базы, на основе нее предварительно отсеять некоторую часть данных из локальной базы, а потом оставшиеся уже проверять конкретно.

Что же касается таблицы в памяти, с которого начался топик, то запрос, связанный с read read_committed транзакцией и которому сделали FetchAll, вполне сойдет за требуемый объект. Только вот если данные из таблицы должны будут меняться для каждой записи локальной базы, то смысла в этой "таблице в памяти" особо не будет.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280201
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochdgdog думаю переписывать модуль заново. И распаралелить всё сразу

..."взять первое действие, провести через него все элементы данных; взять второе действие и провести через него все результаты первого действия; взять третье действие". ...

Вот не поверишь. Пока жду административных решений и товарища ОдынЭсника. План переписи модуля как раз сложился к тому:
А какого х*ра я каждую проводку фигачу?!

Сводим весь импорт в 1 файл или таблицу... не суть. Но все в единый формат.
1. Сначала выкидываем все, что выкидывается впринципе. Тупо сравнением таблицы - дубли. Это вообще ОДИН запрос.
2. Потом проверяем из оставшегося чего нет в справочнике банков и других справочниках. Суем все партией. коммитим.
3.Тут немного логики... проверки, но они плевые для клиента-сервака.
4. Суем все оставшиеся проводки в базу. Пачкой. Коммит
т.е. я так понял, ты как раз о таком разбиении...

и какого х*ра я огород городил? (хотя оправдание есть, я не знал о существовании других источников импорта. И допиливал под сиюминутные требования. Теперь задача раскрыта полностью НАДЕЮСЬ )
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280215
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

ну дык я тебя примерно к такой методе и подталкивал с самого начала, разбить на несвязанные куски обменивающиеся пакетами данных

на каждом источнике данных запускается полу-импорт и создает стандартный пакет для отправки на центральный сервер, который уже окончательно импортирует все такие одинакового типажа пакеты.

вопрос только в балансе, сколько процентов проверок делать на клиентах локально (а для этого потребуется заранее на сервере формировать подробные "требования по импорту", зато потом при новых рабочих местах все параллелится автоматически), а сколько таки на сервере. Грубо отшелушивать лучше всё же удалённо, на процессорах с источниками данных, а окончательную тонкую шлифовку уже можно на сервере.

с буферами сервера та же фигня, сделаешь слишком много - в итоге только хуже получится, опять баланс ищи :-)

с транзакциями то ж: и миллион транзакций по одной записи плохо и одна на миллион записей не лучше, а лучше тысяча по тысяче

и т.д.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280216
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Го-стхизапрос, связанный с read read_committed транзакцией и которому сделали FetchAll, вполне
сойдет за требуемый объек

Только вот он подымет сложность алгоритма до O(N^2)...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280266
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochdgdog Подхалтурил в свое время, "срубил пару штук по легкому". Атомный звиздец))))

Какая же это халтура, если ты там корни пустил ?
Халтура - это "сунул, вынул и пошёл" ( этические вопросы обсуждать не будем ).


Не совсем так)) в 2013-2014 я и думать не мог, что я тут поселюсь))) А пришел я совсем по другому профилю. Правда направление с полгода как свернули и я остался не у дел. Ну не об этом сейчас
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280289
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Го-стхиМинус №1. Надо менять константу при появлении новых полей

- Ну и чё ставо? (запихивая горсть попкорнв в клюф)
У тебя чё, состав полей в табле меняется, как настрояниее у бушек, по 5 раз на дню?

Го-стхиМинус №2. Такая портянка дольше передается по сети

- Чё-чё?
Как порнуху гонять по сети, так ничо не тормозит.
А от разовых 6 килобайт - так пипец, как вся сеть ляжет.

Го-стхиМинус №3. Такая портянка дольше препарится сервером

- А ты и не дергай каждый раз. :-)
Справочник он и в африке справочник. В данном случае для проверки дельт.

- А есле полей нуна не под 600, а 500? Тогда чё?
Бушь в каждой итерации тягать излишки на клиента, напрягая сеть и сервер.

Ну не верится мну, что апдейтяться "все-все-все" поля.

И тырканье "селект * фром Табля" больше грит о лености прогера и его не желания думать головом ДО.
То есть не прогер, а кодер. :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280301
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochDRY principle, это архитектурно

- Ни фига! DIY principle со всеми втекающими...
- Ы?
:-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280317
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И тырканье "селект * фром Табля" больше грит о лености прогера и его не желания думать головом ДО.
То есть не прогер, а кодер. :-)[/quot]

А вот сейчас обидно было. Ага.
Сорри, за офтоп от полного профана: но тогда уж замути массив переменных, где будут перебраны все варианты полей.)) и потом эти переменные пихай в selectы. Вдруг в DBgrideh вывести придется, она очень любит чтоб последовательность полей совпадала с последовательностью в запросе.

Нет ребят без обид, сколько прогеров, столько решений))) Тебе удобно? Ну и зашибись. Работает? Ну и не лезь.)))

ПС на вооружение метод принял. Ничего сложного вроде, но вовремя сообразить не всегда же получается. При большом количестве полей попробую... но вот есть ли преимущество перед звездочкой?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280344
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog... но вот есть ли преимущество перед звездочкой?
Так ни кто, кроме тебя не знает ВСЕЙ твоей задачи.
А по сему - Каждый сверчок свистит как ему видится со своей колокольни. :-)
Значит... ~70% свиста букв равны зеленым свисткам в воздух. :-)

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

PS 1: Если чё, я - не кладовщик. :-)

PS 2:
dgdog...но тогда уж замути массив переменных, где будут перебраны все варианты полей.))
- Ну и как ты, ваш-бродь, всю эту жуйню бушь лопатить под WEB, когда время на сформированный ответ не более 200 мсек?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280365
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogвот есть ли преимущество перед звездочкой?

есть - это более "fail early" и более определённе поведение

если ты потом таблицу поменяешь и в ней убьются некоторые столбцы - то у тебя "фиксированный2 запрос явно и сразу выдаст ошибку, а "звёздочка" сделает вид что так и хорошо и программа споткнеся уже где-то сильно позже.

но вот тупой пример с потолка - мы обновляем данные по массиву record'ов, соответсвенно поля таблицы соответсвуют переменным членам record'a. Если поля в SQL-запросе заданы жестко (формируются из типа record'a) и какое-то из полей пропало в результате неудачного развития проги, сервер сразу скажет "нет такого столбца, иди лесом". А в случае звёздочки этого поля просто не будет в запросе. Предположим, далее ты для каждой строки перебираешь все столбцы запроса и их значения запихиваешь в MyRecordArray[i] в соотв. поля - тогда поле одноименное исчезнутому столбцу ты просто пропустишь и сам этого не заметишь, оно просто не будет обновляться из БД и получить "мусор в памяти".

пример с потолка, но идею ругани, возможно отражает

----

Кстати, в достаточно современной Дельфи пробег по SQL-запросу можно организовать не только как FieldXXX.AsInteger и потом Query.Next, но иногда и таким трюком:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 

type t_0001 = record (* поля запроса и их типы *) end;
var row; t_0001;
begin
....
   for row in MyQuery1.All<t_0001> do begin
        xxxxx := row.FieldX;
        yyyy := row.ColumnY;
        ..........
   end;
   MyQuery1.Close;
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280380
Го-стхи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТолько вот он подымет сложность алгоритма до O(N^2)...

В смысле, будут пробеги по всей таблице главной базы для каждой записи локальной? Ну да, зато сервак не тормозит :)

2 Di_LIne
>У тебя чё, состав полей в табле меняется, как настрояниее у бушек, по 5 раз на дню?

Нет, но меньше действий - меньше вероятность ошибиться/забыть. А если таких таблиц сто?

>А от разовых 6 килобайт - так пипец, как вся сеть ляжет.

От разовых нет, а ну как они раз в секунду перегоняются? От ситуации зависит

>- А ты и не дергай каждый раз. :-)
Справочник он и в африке справочник. В данном случае для проверки дельт.

Опять же, по ситуации. У тебя шаблон использования такой, у кого-то - другой...

>- А есле полей нуна не под 600, а 500? Тогда чё?
Бушь в каждой итерации тягать излишки на клиента, напрягая сеть и сервер.

Ежели не подтягивать все записи разом, то оверхед мб незначительный.

>И тырканье "селект * фром Табля" больше грит о лености прогера и его не желания думать головом ДО.

Леность - двигатель прогресса :)

В общем, не думаю, что запрет на применение "*" должен иметь статус непогрешимой заповеди. Лучше уж в каждом случае руководствоваться здравым смыслом и целесообразностью.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280390
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Го-стхиЛеность - двигатель прогресса :)

- Брехня! (из кины про Неуловимых)
Миф для самоуспокоения лохов и гнилая отмаска, которая не катит. :-)

Прогресс двигает только шевеление извилины.
Но ни как не коденг "по шаблону из книшки".
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280694
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochказалось бы...

на самом деле в некоторых условиях такая транзакция тоже течет ресурсами - например БЛОБами
ты серьезно

хотелось бы душераздирающих подробностей с адресами, фамилиями, явками ... конкретными воспроизводимыми примерами
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280761
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокAriochказалось бы...

на самом деле в некоторых условиях такая транзакция тоже течет ресурсами - например БЛОБами
ты серьезно

хотелось бы душераздирающих подробностей с адресами, фамилиями, явками ... конкретными воспроизводимыми примерами

И вот о чем в моей ветке все эти люди спорят? О_о И кто эти люди? о_О
Шучу, шучу. Я не все понимаю из ваших диалогов, но интересно да. На подкорку пишется, время придет вспонится, осмыслится.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280804
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отчитываюсь, кому интересно:
1. Сдвинув папироску в уголок рта поставил ультиматум начальству: Сейчас импортируем КАК ЕСТЬ. Паралельно полностью переделываю импорт. (дали срок две недели, хмыкнул сказал, что за две недели они получат очередную заплатку, но сам думаю, что впринципе, если не отвлекаться и обложиться грамотными примерами ... управлюсь)
2. Покурили с 1Сником, у него там в 1С есть "ПланВыгрузки". Т.е. при выходе из 1С бухгалтера внесшего свежие проводки, (теоретически) он выгружает все изменения в файл (XML) Который я считываю. Собственно ЭТО ОЧЕНЬ БОЛЬШОЕ ПОДСПОРЬЕ для меня.
2.1 не лезу медленным COM соединением к базам.
2.2 не лезу в базы в которых нет изменений.
2.3 получаю болеменее актуальные данные, а не тыркаю базу на проверки всех проводок за период.

Вот баз 1С у нас большинство. Жду значит, решение от 1Сника до пятницы. Посмотрю в каком формате он может выкидывать данные и насколько эти данные актуальны.

Вопрос к знающим(треп на тему приветствуется):
Допустим есть у меня 200 потенциальных файлов на импорт (формат не суть, любой разберу, но скорей всего будет XML). Которые надо проверить, отфильтровать и только потом влить в основные таблички базы.

Беда в том, что файлы появляются не одномоментно. Т.е. если бы они были все разом сформированы, считал их в TempTable, обработал процедурами и всё.

Но, на деле будет так: появился файл, я его увидел, тутже кинулся считал. Кинул в TempTable обрабатываю... тут появляется еще 4 файла, один из этой же конторы, 3 других из других.... И чего бы сделать, в коем-то веке правильного?
1. Дать какой-то индекс данным из определенного файла и работать с этим куском (паралельно добавляя в TempTable другие файлы и обрабатывать их, каждый отдельно по индексу?
2. Под каждый кусок импорта создавать временную таблицу? И расстреливать ее по окончании обработки?
3. Другие варианты?
(тут кто-то говорил про какие-то ГлобалТмпТабле... вроде, но мне не до них было, сейчас найду сообщение еще про них почитаю...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280818
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

фишка GTT в том что сами таблицы (метаданные) постоянные их не надо каждый раз создавать и удалять, а вот данные в них временные: либо на время сессии, либо на время транзакции. Соответственно каждая сессия/транзакция видит и работает только со своими данными.

Почитать можно здесь и здесь
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280819
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще вопрос, на сколько я правильно понял механизм:

Есть Query для чтения. Дал ему отдельную транзакцию (read)

"write
nowait
rec_version
read_committed
"
Select в query забит жестко, не изменяется никогда.
Стартую транзакцию.
Выполняю Запрос.
(Жарптица строит план, выполняет, отдает данные)
Получаю данные обрабатываю...
Закрываю транзакцию. (Вот здесь, ЖарПтичка похоронит план да? и не будет держать его в кэше? Я правильно понял?)

( как правильно? Стартавать транзакцию Реад перед выполнением запроса, или стартануть ее скажем при открытии формы и обрывать по закрытию формы? Как дольше держать план выполнения запроса в кэше?)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280821
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

1. план получается при препарировании запроса. Поэтому до тех пор пока ты не грохнешь свой query, или не закроешь коннект, или не сделаешь ему повторный prepare, или не вызовешь unprepare с планом ничего не будет.
2. Если у тебя основные действия будут делаться в ХП, то планы её внутренних запросов кешируются во время загрузки процедуры в кеш метаданных, который для классика будет жить до конца коннекта.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280835
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

2. Если у тебя основные действия будут делаться в ХП, то планы её...
Понял. Спасибо. Но нет это не ХП, это справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят (ну тут еще и DbGridEh, но пока хочу правильно сделать сами запросы, выжать максимум). Т.е. при закрытии транзакции Птичка план оставит до поры до времени? (FB Classic 2.1)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280838
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

фишка GTT в том что сами таблицы (метаданные) постоянные их не надо каждый раз создавать и удалять, а вот данные в них временные: либо на время сессии, либо на время транзакции. Соответственно каждая сессия/транзакция видит и работает только со своими данными.

Почитать можно здесь и здесь

(похоже) То что доктор прописал. Ушел эксперементировать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280844
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

план запроса никак не связан с транзакцией и временем её жизни
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280846
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по GTT? (ответ на вопрос сэкономит мне час на эксперименты)
Создавая CREATE GLOBAL TEMPORARY TABLE MYSUPPERGTT в одной копии программы, следить чтоб другая копия одновременно создавала CREATE GLOBAL TEMPORARY TABLE MYSUPPERGTT_1

Или это проблема сервера? И я в каждой копии создаю CREATE GLOBAL TEMPORARY TABLE MYSUPPERGTT и CREATE GLOBAL TEMPORARY TABLE MYSUPPERGTT и они не пересекуться (для каждой копии программы свой набор данных)?

А как это скажется на мусоре? А производительность сильно просядет от GTT (это ведь надо создать ГТтаблю. Запихать туда данные. Желательно проиндексировать... выполнить пару ХП... грохнуть ГТтаблю)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280852
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попутный вопрос: ГТТ создается в памяти (ну если логику включить)? Какая интересно логика у разработчиков и как это конкретно работает...


Форум КЛАСС. Где я раньше был? Спасибо вам ребята. Все пинки в основном в нужную сторону
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280865
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdogПопутный вопрос: ГТТ создается в памяти (ну если логику включить)? Какая интересно логика у разработчиков и как это конкретно работает...

Вопрос снят. Нашел сообщение Dimitr где то в других постах "для начала они в страничном кеше ФБ, как и любые другие таблицы. Затем в кеше оси. И уже потом на диске."
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280869
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

надо не просто на буквы глядеть, но и хоть чуток разобраться что тебе пишут. GTT создаётся ровно один раз и не в твоей программе, а в любом средстве администрирования IBExpert, isql и т.д. Метаданные (поля и их типы) общие, а данные раздельные. И в плане мусора там всё норм. Данные GTT хранится не в самом файле БД, а во временных файлах или оперативной памяти. За временем жизни временных файлов следит сам FB. Ну релиз ноты почитай уже.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280921
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

надо не просто на буквы глядеть, но и хоть чуток разобраться что тебе пишут. GTT создаётся ровно один раз и не в твоей программе, а в любом средстве администрирования IBExpert, isql и т.д. Метаданные (поля и их типы) общие, а данные раздельные. И в плане мусора там всё норм. Данные GTT хранится не в самом файле БД, а во временных файлах или оперативной памяти. За временем жизни временных файлов следит сам FB. Ну релиз ноты почитай уже.

Хм. Уже пинают. И это еще Di_LIne и Arioch спят... те выйдут вообще на ноль поделят ,проиндексируют и спишут как ненужную GTTешечку.

Денис - да я вкурсе, что надо читать. Что никто конкретную задачу не разгребет кроме недотепы-автора. Но руки и глаза разбегаются, времени катастрофически не хватает. Я вот сюда (на форум) пришел с одной задачкой... а напинали так, что я сижу и перелопачиваю свой код вообще в других модулях. И ДА, помогает.))) Тема GTT в голове, но руки не доходят, ну и кидаю вопросы которые могут возникнуть. За тычок в сторону GTT признателен. За объяснения, даже сквозь зубы СПАСИБИЩЕ. Твои ссылки про GTT прочитал по диагонали. Пока руки заняты перебивкой всяких Query вертятся вопросы, вот и кидаю их, а вдруг кто ответит и хоть часть инфы копать не надо будет.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280927
Го-стхи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdogэто справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят
Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280928
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я бы вот сам про GTT когда бы узнал, и что это применимо к моим задачам. А так раз пнули, два пнули, башкой в унитаз макнули... О тооочно. Во! то что нужно - GTT)))) Так что не стесняйтесь)))

Уяснить надо много. ОЧЕНЬ МНОГО в короткий срок: от правильной конфигурации Птицы, до правильного написания кода в приложении. Чередую задачи, чтоб не свихнуться)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280934
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Го-стхиdgdogэто справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят
Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.

Яндексы-Хренадексы не вкурсе запроса "firebird разрядная сетка". Ладно, отложим понимание этого. Или подскажете со временем или... или Яндекс вспотеет в выходные.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280950
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокAriochказалось бы...

на самом деле в некоторых условиях такая транзакция тоже течет ресурсами - например БЛОБами
ты серьезно

хотелось бы душераздирающих подробностей с адресами, фамилиями, явками ... конкретными воспроизводимыми примерами

копай в обе стороны от 14633271
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280963
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogХм. Уже пинают. И это еще Di_LIne и Arioch спят... те выйдут вообще на ноль поделят ,проиндексируют и спишут как ненужную GTTешечку.

щаззз

стану я попусту индексировать то, что все равно под списание? а потом индексы еще чистить?
так спишешься бе церемоний! :-P
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280967
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

если поделить ТСа на 0, то он в теории должен в бесконечность превратится
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280968
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Го-стхиdgdogэто справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят
Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.

Просто я не могу описать все задачи. Отсюда конечно непонимание... Эти query еще срабатывают после Post в табличке. И пересобирают PickListы. Поэтому если уж залез бух править эту табличку, то вызываются эти запросы часто. Переписал, пересобрал. За одно нашел не проиндексированный справочник))) Чисто субъективно, все начало работать быстрее.

Господа ээээ... НОРМАЛЬНЫЕ программисты, (одел каску, залажу под стол... ибо можете ведь и покалечить) PfibDataset.FetchALL это не по феншую??? Это зло? (110 тысяч записей выкидывает, да тормозит. Но они все прям позарез нужны бухгалтеру, "ВСЕ И СРАЗУ!")
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280973
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogГо-стхипропущено...

Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.

Яндексы-Хренадексы не вкурсе запроса "firebird разрядная сетка". Ладно, отложим

Он имеет в виду, что сколько бы у тебя в запросе строк ВСЕГО не было - на экран влезет несколько десятков, в память подтянется (чтобы быть под руками заранее) может быть еще пара сотен. И всё.

Остальные данные как правило гриду не нужны, пока юзер не прокрутит его сильно-сильно вниз (что в 90% случаев не делается, люди не читают строки тысячами как правило, а уточняют отбор)

Исключение - если ты например в гриде включил какие-нибудь навороты типа "показывать общее количество строк" - тогда да, пока всю выборку до конца не вычитает, рисоваться не начнёт.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280976
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Го-стхиdgdogэто справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят
Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.

А если там сортировка без индексов? пока ВСЕ строки не выберешь - не отсортируешь...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280979
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисArioch,

если поделить ТСа на 0, то он в теории должен в бесконечность превратится

Угу... представил себя с татухой на лбу "Warning: division by zero!"
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280980
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

Обычно выбор всех строк (FetchAll) с навигацией по индексу будет медленней, а первой порции (обычный Fetch) быстрее.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280981
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogБеда в том, что файлы появляются не одномоментно. Т.е. если бы они были все разом сформированы, считал их в TempTable, обработал процедурами и всё.

Но, на деле будет так: появился файл, я его увидел, тутже кинулся считал. Кинул в TempTable обрабатываю... тут появляется еще 4 файла, один из этой же конторы, 3 других из других....

а почему нельзя дождаться появления ВСЕХ файлов? все равно тебе надо будет контролировать, что все иточники данных отдуплились, и если откуда-то ответа нет (хотя бы и пустого ответа "нет новостей") - то трезвонить админам разбираться

просто ты собирался устроить "глобальную оптимизацию" по поиску дупликатов между клиентами ещё до того, как вся эта бочка мёда польется на сервер. Я не знаю, да и ты сам наверное не знаешь, насколько много данных бы так почистилось, но возможно некоторая задержка чтобы получить все ответы была бы вполне компенсирована общим ускорением после?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280982
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисArioch,

если поделить ТСа на 0, то он в теории должен в бесконечность превратится

это если он изначально не ноль, а то ведь и в случайное число может....
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280984
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog110 тысяч записей выкидывает, да тормозит. Но они все прям позарез нужны бухгалтеру

как именно они ему нужны? что именно он с ними делает?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280988
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogPfibDataset.FetchALL это не по феншую???
Это нормально если он делается один раз. Это ни к чему если датасет работает как источник
для грида.

За постоянное перезаполнение PickList надо отрывать руки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39280995
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogа напинали так, что я сижу и перелопачиваю свой код вообще в других модулях. И ДА, помогает.

просто ты сюда зашёл в типовом состоянии x-y-z

www.gunsmoker.ru/2008/10/x-y-z.html

но к счастью, в отличие от большинства намёртво заклинившихся на этом, тебя попустило уже после одного дня

поэтому дальше с тобой имеет смысл говорить

а вот если бы ты начал твердолобить типа "не отвлекайте меня, мне просто надо создать таблицу в памяти клиента", то было бы наоборот, форум бы вымер и тебя бы обходили стороной
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281000
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

если грид с сортировкой, но не умеет менять ORDER BY в самом запросе, то он поневоле будет делать FetchAll - ибо куда ему деваться для сортировки на клиенте...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281004
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

EhGrid умеет
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281010
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch...а почему нельзя дождаться появления ВСЕХ файлов?
Я тебя понял. Да ты прав (был бы). Но базы Москава - Новосибирск... Там уже отдуплились, там еще спят... по "этой" базе сегодня вообще движухи нет и файла нет. Эти загрузку из банка сделали только утром. А там вообще бух болеет и файлов не будет... там бух перебила несколько платежек недельной давности которые уже есть в нашей базе...
Разом никак. Только паралелить запросы к файлам.

Логика представляется такая:
Висит утилитка на сервере, мониторит каталоги. Каталог такой-то (для экспорта-импорта определенной базы 1с) файл появился? Да. Запускается подпрограмма импорта. Считал файл. Файл удалил (1сина понимает, что я получил последний экспорт) Утащил данные на сервер. Разбираю их по тихому.Закрыл подпрограммку импорта.

Но утилитка может увидеть 3-5-20 файлов одновременно. Вот и задумался, толи в очередь ставить, толи... ну про ГТТ еще почитаю. (это все еще теория. просто соображаю в какую степь траншею копать)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281013
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochdgdog110 тысяч записей выкидывает, да тормозит. Но они все прям позарез нужны бухгалтеру

как именно они ему нужны? что именно он с ними делает?

в dbgrideh фильтрами елозит. Фильтры " От начала времен" и "по всем столбцам". Я это на откуп отдал DBGridEh. Ну не передергивать же запрос каждый раз в PfibDataset? Не прав, бей. Только не по почкам...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281016
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovdgdogPfibDataset.FetchALL это не по феншую???
Это нормально если он делается один раз. Это ни к чему если датасет работает как источник
для грида.

За постоянное перезаполнение PickList надо отрывать руки.


Это почему? Справочник меняется динамически (при паралельном импорте. при изменении записей)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281017
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogСчитал файл. Файл удалил (1сина понимает, что я получил последний экспорт)

не удалил, а перенёс в другую папку для обработанных файлов. Иначе в случае ошибки будет очень весело. А уж из той папки можно периодически вычищать, когда файлы полностью потеряют актуальность.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281020
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogНо нет это не ХП, это справочники для заполнения PickList (dbgrideh) по полям. Срабатывает при реопене PfibDataset. Заметил, что сильно они тормозят (ну тут еще и DbGridEh, но пока хочу правильно сделать сами запросы, выжать максимум).

PickList - то же combobox ?
И ты в него пихаешь 110К элементов?
Обычно стандартные виндовые контролы этого не сильно любят.

Ты можешь разделить операцию: сначала вычитать всю таблицу в массив ( или, если Delphi 2010+ ее лучше в TList<record-type> ), а потом из массива заполнить Picklist ?

И на этих трёх точках поставить замеры времени в программе


и посмотреть реальные траты времени на оба эти шага
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281023
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисArioch,

EhGrid умеет

при правильной настройкЕ, правиьлной увязке с компонентами-запросами и т.д.

а примеры кода мы тут уже видели, так что рабочая связка не гарантирована

хотя я тоже надеюсь, что это сделано правильно
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281025
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисdgdogСчитал файл. Файл удалил (1сина понимает, что я получил последний экспорт)

не удалил, а перенёс в другую папку для обработанных файлов. Иначе в случае ошибки будет очень весело. А уж из той папки можно периодически вычищать, когда файлы полностью потеряют актуальность.

Согласен полностью. Но веселье с непонятками в файлах (его например и бух может удалить и вирус покосить) уже предусмотрел импорт "конкретной базы" за конкретные даты вручную. Через те же COMсоединения. Косяки с файлами не моя беда. Вот вам бухи импорт вручную если чуете подлянку. Остальное к сисадмину (куда делся файл?) к 1Снику (почему не сформировался или сформирован не правильно).
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281027
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochесли грид с сортировкой, но не умеет менять ORDER BY в самом запросе, то

....то это правильный грид и FetchAll здесь - наименьшее зло.

dgdogСправочник меняется динамически (при паралельном импорте. при изменении записей)

Справочник настолько динамичен, что изменяется ежесекундно? Протухло что-то в датском
королевстве... Или это вообще не справочник.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281030
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogДопустим есть у меня 200 потенциальных файлов на импорт (формат не суть, любой разберу, но скорей всего будет XML). Которые надо проверить, отфильтровать и только потом влить в основные таблички базы.

- Гуанамо вапроз! :-)
В среднем HTML-файлик(страничка) парсится и вгоняется в БД (с полным расчетом релеватности) за 3 (три, числительное) сек.
Итого - 10 мин +/- 10%.

И не канифоль себе моск их_ем_еле форматом...
В нем "накладные расходы" на теги под писят % подскакивают.
А при большенстве цифирок - и овер 50% получишь в легкую.
Оно тебе надо лопатить?;-)

dgdogКоторые надо проверить...
Ты сам-то понял, чё написал?
И как ты бушь их проверять, если не знаешь чё в них(в каженном файлике) правильно должно быть?
И из-за оной кривой строчки - признаем весь файлик левым и отправляем по Е-мылу главбушке на личный ящег СМС-кой в 3 ночи мессагу с текстом:
- На, мол, голубушка, разбирайся с ентой фигней! Тута, здеся и не медля.
А иначе фигушки чё к 9 утра получишь.
А если не успеете - абуза уйдет генерльному. И не гри, что я тебя не предупреждал.
(в конце обязательно жирный смайлик "курю бамбук")
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281033
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

у меня подозрения что у него из параллельных импортов одни и те же записи могут меняться. Если это так, то идея тухлая и можно сразу в морг, задумка автора помрёт на обработке конфликтов.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281035
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogв dbgrideh фильтрами елозит. Фильтры " От начала времен" и "по всем столбцам". Я это на откуп отдал DBGridEh. Ну не передергивать же запрос каждый раз в PfibDataset? Не прав, бей. Только не по почкам...

а фильтры запоминаются ? в смысле если вчера бух закрыл прогу с фильтрами и значениями в них, а сегодня с утра открыл заново - фильтры и их значения сами восстановятся или ему надо будет их заполнять?

изменение запроса плохо тем, что курсор улетает в начало грида, не фиксируется на текущей строке (случай, что она тоже убивается новым фильтром - особый)

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

Если фильтры каждый раз заново заполняются, конечно.
Тогда и для буха будет видно, что программа не просто тормозит, а реагирует на её последовательные действия - вот данные прогрузились, а вот начали фильтровать
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281037
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochСимонов ДенисArioch,

EhGrid умеет

при правильной настройкЕ, правиьлной увязке с компонентами-запросами и т.д.

а примеры кода мы тут уже видели, так что рабочая связка не гарантирована

хотя я тоже надеюсь, что это сделано правильно

сортировка, фильтрация идет локально на клиенте. Запросов в базу не летит. 100% и да фильтр немного переписал уже не помню в каком pas файле EhLib. бух пишет только начало искомого значения... звездочка подставляется автоматом. Нет, с DBGridEh все норм. Есть косяк в ДБГриде поля не в том порядке как в запросе. Говорят дает прирост производительности чуток(клиенту), но пока эксперементировать нет времени. Работает и пусть пока работает. Буху сказал. Хотите 120 тысяч строк разом, пожалуйста, вот вам 5 секунд на открытие формы. Через год у нас будет порядка 500 тысяч строк и килограмм записей в выпадающих списках полей... ну вы тогда вообще покурить успеете. Ничего не ответила золотая рыбка.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281049
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochа фильтры запоминаются ? в смысле если вчера бух закрыл прогу с фильтрами и значениями в них, а сегодня с утра открыл заново - фильтры и их значения сами восстановятся или ему надо будет их заполнять?...
Нет не сохраняются. Получаю новые данные. Фильтры пусты. Данные летят по плану Натураль ибо, "все надо". Первоначальная сортировка (натураль) по уникальному ID...

Дальше бух уже соображает неистовую фильтровку и гоняет полученные данные и в хвост и в гриву. (загрузил ей данные и всёё, только справочники перечитываю в пиклисты) Нужна ей адекватная версия данных, жмет кнопку "обновить". И начинает все с начала
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281055
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисDimitry Sibiryakov,

у меня подозрения что у него из параллельных импортов одни и те же записи могут меняться. Если это так, то идея тухлая и можно сразу в морг, задумка автора помрёт на обработке конфликтов.
Нет. не могут... хотя эти долбаные Банки со своими БИК... да возможно. (банк закрылся, под его биком открылся другой... было такое. А у меня по бикам прибиваются... тут косяк возможен, но очень редко) остальное врядли. (но подумаю вечером. спасибо за наводку на возможные грабли)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281060
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЕсть косяк в ДБГриде поля не в том порядке как в запросе.
- Какой-такой нафех ДБГрид?
Ни одного визуал-контры тут и близко не лежало!
Ты чё собрался показывать в этой "конвертилке" и главное кому?!
Серверу? Маршрутизатору? Или сменному инжинёру, что служба медом не казалась? :-)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281062
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogпо "этой" базе сегодня вообще движухи нет и файла нет

не аргумент

лучше пусть присылают пустой файл, просто ради подтверждения что они не умерли и не набухались а работают в штатном режиме

там интернет постоянный или dial-up, можешь ты в любую секунду по своему хотению связаться с каким-нибудь их сервером ?

Логика представляется такая:
Висит утилитка на сервере, мониторит каталоги. Каталог такой-то (для экспорта-импорта определенной базы 1с) файл появился? Да.

Ну мне преставляется более нормальной, когда твои программы первичного импорта постоянно, службой windows как тот же firebird, работают на источниках данных.

Периодически по своему графику сервер их всех обзванивает (проверяя заодно, что все живые) и говорит "давай апдейт!", а они его автоматически формируют (бухи же не хотят давить лишних кнопок, ты говорил) и выливают на сервер, даже если файл будет пустышкой ("я клиент такой-то, у нас тут всё как вчера, новостей нет").

конечно если добросовестные бухи на местх сами хотят после особо крупных операция вручную инициировать выгрузку вне графика - то дело другое

Ну и

Висит утилитка на сервере, мониторит каталоги. - это называется polling, не всегда хорошо (разве что будешь заодно мониторить доступность самих серверов с каталогами, двух птиц одним камнем).

Я бы сделал наоборот:
* на сервере расшаренная на приём папка обновлений
* каждый клиент формирует файл-апдейт у себя ( и считает его контрольную сумму типа md5/sha1, если в файле нет встроенной самопроверки как в zip/7z/rar )
* потом под временным названием(достаточно другое расширение например, или какие уж ты сам шаблоны названий файлов выберешь) его заливает на сервер (а сама эта процедура может тоже быть долгой, если связь медленная. Не хотелось бы чтобы импортироваться начал неполный файл)
* потом рядом кладет файлик с контрольной суммой
* потом переименовывает временный файл в постоянный

Соответственно для сервера
* можно не перечитывать по таймеру каталоги снова и снова, а просто попросить у Windows сообщать когда в локальной(!) папке такой-то появятся файлы с таким-то названием
* не будет ситуации, когда сервер подвис на несколько минут просто пытаясь прочитать расшареную папку неудачного клиента, и в это время не обрабатывает других клиентов у которых все готово
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281066
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIne....
dgdogКоторые надо проверить...
Ты сам-то понял, чё написал?
И как ты бушь их проверять, если не знаешь чё в них(в каженном файлике) правильно должно быть?
...

Извини, в непонятки ввел. Ну ятут одной рукой в Delphi, одним глазом на Йбазе:
"Проверить" не правильность файла - это пусть у экспортирующей стороны голова болит. А записи "а есть такая проводка в моей базе уже? А не изменения ли это старой проводки?" как-то так. А сами файлы чего их проверять. Получил ошибку? Разбирайтесь с экспортом 1С. Структура файла будет оговорена до тонкостей в пятницу И ТОЧКА (от возможностей 1Сника зависит.)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281068
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

а если не могут, то какого хрена у вас в PickList новые данные могут появится во время импорта? Что вообще такое PickList, что туда попадает?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281072
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogAriochа фильтры запоминаются ? в смысле если вчера бух закрыл прогу с фильтрами и значениями в них, а сегодня с утра открыл заново - фильтры и их значения сами восстановятся или ему надо будет их заполнять?...
Нет не сохраняются. Получаю новые данные. Фильтры пусты. Данные летят по плану Натураль ибо, "все надо". Первоначальная сортировка (натураль) по уникальному ID...

Дальше бух уже соображает неистовую фильтровку и гоняет полученные данные и в хвост и в гриву. (загрузил ей данные и всёё, только справочники перечитываю в пиклисты) Нужна ей адекватная версия данных, жмет кнопку "обновить". И начинает все с начала

ну я так и думал

поставь себе флажок, был уже FetchAll или нет
в датасете на AfterOpen этот флажок сбрасывай
при включении фильтров проверяешь флажок и если надо делаешь FetchAll с установкой флажка

и часики на экране, часики - http://www.deltics.co.nz/blog/posts/tag/delticshourglass - пока золотой рыбке твои слова про "покурить" - абстрактная фигня, криворук со своей тормозной программой кочевряжится, она их через неделю забудет. А вот когда форма открылась отноительно быстро, а включение фильтров явно вызывает дополнительные тормоза - тогда она уже будет понимать что к чему и думть стоит оно того или нет
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281077
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogНет. не могут... хотя эти долбаные Банки со своими БИК... да возможно.

мне тут недавно сказали, у филиалов одного банка могут совпадать ИНН

вот блин десяток разных юр-лиц - и один ИНН на всех, только КПП разные
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281086
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIneИ не канифоль себе моск их_ем_еле форматом...
В нем "накладные расходы" на теги под писят % подскакивают.

и пусть подскакивают - винчестер все равно медленнее процессора и оперативки

хотя можно и JSON или YAML глянуть конечно

но мне сомнительно чтобы два варианта SGML'я - HTML и XML
сдается мне, так как-то HMTL и XML не в равных условиях сравниваешь
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281087
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog Структура файла будет оговорена до тонкостей в пятницу И ТОЧКА (от возможностей 1Сника зависит.)
А я тебе как раз и про структуру файлика - в том числе.
Ты вводишь св систему еще одну "переменную" неизвестной и теде не подвластной природы. ;-)
Бо в самом файлике "битой" может оказаться одно значение, строка, блок (и тп) ну и весь целиком его фтопку.
Плюс (туда-сюда) формат одной записи (в терминах БД) может меняться с временем.
Бухам же делать неча, вот им и подкидывают постоянно всякие изменения.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281089
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogбух пишет только начало искомого значения... звездочка подставляется автоматом.

В этом случае PickList должен заполняться не при открытии формы и тем более, не при каждом
изменении справочника, а только при раскрытии этого самого списка. Причём заполняться уже
с этим вменяемым фильтром.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281090
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogНе прав, бей. Только не по почкам

в переводе на английский это примерно "you may click but do not click [mouse] buttons"

Источник - гуртовщики мышей
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281094
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochсдается мне, так как-то HMTL и XML не в равных условиях сравниваешь
А ты бамашку-то возьми и прикинь: среднюю длину чисел (в шт. цифр) и кол-во знаков служебных тегах описывающих что это за число. :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281096
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogНо утилитка может увидеть 3-5-20 файлов одновременно.

если она их УЖЕ увидела - и они УЖЕ финализированы а не наполняются по ходу - то кажется лучше их вычитать все и одним пакетом запустить

но если какой-то файл из этих лежит "в плохом месте" и будет выкачиваться с обрывами и рестартами целый час - то лучше ну его нафиг

итого - усложнение кода импортера, который должен на лету определять ссоставы пакетов и многопоточно тянуть несколько файлов, и обрабатывать ошибки срва соединения....

вот и поэтому тоже я бы выгрузку файла орагнизовал наоборот, каждый клиент свой локальный файл выгружают на общий сервер
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281102
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIneAriochсдается мне, так как-то HMTL и XML не в равных условиях сравниваешь
А ты бамашку-то возьми и прикинь: среднюю длину чисел (в шт. цифр) и кол-во знаков служебных тегах описывающих что это за число. :-)

а потом сравнить с соотношением скорости чтения из сети/из файла/из оперативки, "перестать беспокоиться и полюбить бомбу"

а если еще SAP-парсер вместо DOM-парсерa исхитриться прикрутить...

если файлы одинаковой сложности, то ты что-то с парсером не то делаешь, например может быть заставляешь валидацию XML проводить по схемам, а на HTML того же не делаешь
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281113
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

а если не могут, то какого хрена у вас в PickList новые данные могут появится во время импорта? Что вообще такое PickList, что туда попадает?

Новый клиент. Неизвестный до селе Банк. Банк получатель (таже петрушка) Клиент открыл новый счет в другом банке или в этом же. (эти группируются хотябы) Есть страшный пиклист Юрики... всего не объясню, но там тонны записей вываливаются. Сегодня дал сутки подумать бухам "нужен этот пиклист или нет"... по моим данным НЕТ. Ну вот так оптимизируемся, как могу, как могу... что успеваю
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281114
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIne,

html слишком вольный формат, да и предназначен он для отображения, а не передачи данных.
xml сложен и избыточен. Тем более при парсинге через DOM жрёт хренову тучу памяти, а парсинг через SAX довольно сложен.
А вот json мне нравится, правда в старых Delphi не было поддержки из коробки, а в новых есть ощущение, что то что они там нагородили будет работать не шибко шустро (не пробовал).
Ещё есть варианты плоские файлы с разделителем или с фиксированной шириной (как для External table).
Ещё есть dbf, но он мне не нравится тем что стандартов на dbf целая тонна, каждый городит что хочет, да и с кодировками бывает геморрой.

Но я думаю что ТС в любом случае придётся работать с тем что ему дадут 1Cники
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281116
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так просто для обзора, если вдруг интересно кому

https://quoderat.megginson.com/2007/01/03/all-markup-ends-up-looking-like-xml/

"On a Core2 2.5Ghz Desktop, VTD-XML outperforms DOM parsers by 5x~12x, delivering 150~250 MB/sec per core sustained throughput."

http://blog.synopse.info/post/2011/06/02/Fast-JSON-parsing
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281120
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochdgdogНет. не могут... хотя эти долбаные Банки со своими БИК... да возможно.

мне тут недавно сказали, у филиалов одного банка могут совпадать ИНН

вот блин десяток разных юр-лиц - и один ИНН на всех, только КПП разные

Так и есть. Эти грабли пройдены еще на стадии импорта реестра банков. Там адский пипеец. Прибивал по бикам+инн+кпп. и... перематерился когда у одного банка забрали лицензию А ЕГО БИК отдали новому банку. О_о Благо бухгалтерию "отпустило" и они согласились хранить только название банка и головной инн, бик... если взбрыкнут, не знаю, что буду делать. И еще они блеа*ь последнее время взяли моду переименовываться из ЗАО в ОАО из ОАО в ЗАО со сменой инн, без смены инн... Спасибо, что для меня это не очень критичный справочник.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281121
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogСегодня дал сутки подумать бухам "нужен этот пиклист или нет"... по моим данным НЕТ. Ну вот так оптимизируемся, как могу, как могу... что успеваю

опять же, если как-то исхитриться и сделать задержку на формирование пиклиста
1) необязателтельной - не используешь пиклист, нет и задержки
2) явно видимой, с чем это непосредственно связано

....то бухи сами начнут естественным образом про это думать

я eh-grid не знаю, но если можно сделать загрузку по требованию - 19461540 - то мысль правильная.
тронул пиклист - любуйся на "часики" на экране и думай, так ли сильно надо было его трогать
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281128
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochтронул пиклист - любуйся на "часики" на экране

С правильным фильтром отзыв при раскрытии выпадающего списка меньше реакции пользователя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281129
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениса в новых есть ощущение, что то что они там нагородили будет работать не шибко шустро (не пробовал).

ну а если еще использовать вкусности вроде автоматического заполнения record'ов или объектов из XML через RTTI - так и вообще будет весело, но виноват будет парсер

в новых - как и все в новых Delphi - ошибка на ошибке

так что rule of thumb - если для какого-то фукционала есть известная FLOSS-библиотека и "из коробки" - лучше выкинуть коробку и брать FLOSS

соотв. для JSON в основном используют три либы:
SuperObject - из-за "ленивого" простого API и вменемой скорости
Synopse mORMot XML - из-за заточенности на максимум скорости.
lkJSON - не знаю почему, не трогал, но популярен
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281130
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch... например может быть заставляешь валидацию XML проводить по схемам, а на HTML того же не делаешь
- Ой-ой-ой...
От твоего кидания терминами суть процесса не меняется.
Полюбасу - берется файлик и вычитывается от первого до последнего байта, с анализом "а ты кто?"....
Такшта...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281136
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос на засыпку то Олл:
- Чем отличается кодер и прогера?
Тем, что на "ой, нада сделать ко вчера!" прогер с начала думает "как сделать, штоп ни чего не делать?", а кодер - "Да я ща, за 6 сек наваяю!"

:-))


Симонов ДенисНо я думаю что ТС в любом случае придётся работать с тем что ему дадут 1Cники
Это - подход кодера.
:-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281137
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЕщё есть dbf, но он мне не нравится тем что стандартов на dbf целая тонна, каждый городит что хочет, да и с кодировками бывает геморрой.

в основном стандарты различаются наворотами типа разных форматов индексов, что важно для работы, но не важно для чтения

TDBF.sf.net сами данные в основном читает вполне неплохо
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281140
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochдля JSON в основном используют три либы
Ни "в основном", ни в "дополнительном" списке использующих JSON 1C не значится. Не умеет
она ничего кроме XML.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281141
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисНо я думаю что ТС в любом случае придётся работать с тем что ему дадут 1Cники

так же как и слюбым другим источником исходных данных, например с "папкой с тестовыми квитками от банковских операций" - что дали то и жуй

а вот "прожевав" это автор вполне может "выплюнуть" свой собственный унифицированный "пакет обновлений", который будет одинаковой структуры для любых источников.

И там он сам может выбирать - хоть XML-zip, хотья Json-zip хоть много-dbf-zip
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281147
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAriochдля JSON в основном используют три либы
Ни "в основном", ни в "дополнительном" списке использующих JSON 1C не значится. Не умеет
она ничего кроме XML.

я же не про 1с

с первичными данными понятно - какие они есть, такие и есть, и всё

я про промежуточный общий формат, в который перед окончательным импортом в FDB будут сводиться/конвертироваться даные из любых типов/форматов источников
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281149
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

а нафига оно надо собирать ещё какие промежуточные форматы?

Ты ещё XSLT ему предложи чтобы из XML в любой формат преобразовывать
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281152
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIneПолюбасу - берется файлик и вычитывается от первого до последнего байта, с анализом "а ты кто?"

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

цитату я приводил, скорость парсера в 2-3 раза выше скорости чтения винчестера ( в идеальном дял посленего случае ) - так что ограничение все равно не в парсере будет
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281157
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote Симонов Денис]а нафига оно надо собирать ещё какие промежуточные форматы?

1. чтобы не дублировать код импорта в БД ни по программам, ни по компьютерам
2. чтобы можно было вести истрию обновлений
3. чтобы можно было раследовать ошибки, с помощью п.2

Симонов ДенисТы ещё XSLT ему предложи чтобы из XML в любой формат преобразовывать

у него задача противоположная, так что ты cильно не в кассу с XSLT
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281161
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch - что дали то и жуй

- Ыщо один...:-)))))

PS. Для разрядки.
Как-то давным давно пристала фирма "хотим экспорт-импорт с вами!"
Ну лана, раз хОчите и денег даете, так пуркуа бы не па?...
Давайте через пару дней встретимся и согласуем тех. моменты.

В назначенный срок приехал к ним. Ихний сам-глав и главный кодер.
Дают мне листок с 2-мя строчками "ТЗ-импорт" и в 3 строки "ТЗ-экспорт".
- Хм...
Отдал им свою бамашку: 15 страниц "ТЗ-импорт" и 25 стр с "ТЗ-экспорт".

Внимание вапрос:
- Кто курил бамбук, а кто переплюнул Сизифа?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281169
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochцитату я приводил, скорость парсера в 2-3 раза выше скорости чтения винчестера ( в идеальном дял посленего случае ) - так что ограничение все равно не в парсере будет
Отсыл к скорости винта - прыжок в сторону.
- Щетай это константой и выноси за скобки, как в математике.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281171
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIne,

с хрена ли выносить за скобки, если в нрмальном парсере к окончанию загрузки файла 90% его уже будет разобрано ?

ну а если и выносить, то тогда время парсинга считай не в секундах, а в процентах от ВСЕЙ задачи в целом
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281172
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIne - Кто курил бамбук, а кто переплюнул Сизифа?

а смотря чей ТЗ выбрали в итоге

я вот не думаю, что 1С согласитс на ТЗ написанный автором
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281173
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я это к тому, штоп прекратить кидание на вентилятор терминов.
А перевернуть задачу:
- Пусть 1-Цешник выгружает дельты, в удобном для меня формате, в удобное место.

- Не, ну ачёткова? (одно слово)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281182
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochа смотря чей ТЗ выбрали в итоге

я вот не думаю, что 1С согласитс на ТЗ написанный автором

Пытаешься опровергнуть постулат:
- Кому больше надо, тот и пашет?
:-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281187
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochс хрена ли выносить за скобки, если в нрмальном парсере к окончанию загрузки файла 90% его уже будет разобрано ?

- Сие не есть факт, мистер Дюк. (кина про Неуловимых)
Это - оптимистичный прогноз. ;-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281190
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIne,

ну если сравнивать пессимистичные парсеры - то я со всем согласный, кривые парсеры XML на порядки хуже хороших парсеров JSON
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281194
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIneВопрос на засыпку то Олл:
- Чем отличается кодер и прогера?
Тем, что на "ой, нада сделать ко вчера!" прогер с начала думает "как сделать, штоп ни чего не делать?", а кодер - "Да я ща, за 6 сек наваяю!"

:-))


Симонов ДенисНо я думаю что ТС в любом случае придётся работать с тем что ему дадут 1Cники
Это - подход кодера.
:-)
Ща обидно было. И да у меня варианта нет. Или лазить самому по базам. Или 1сники формируют файл как могут. А я уже потом к этому формату сведу и текстовые файлы и выгрузки из других БД.

Всем ответить не могу. Да даже прочитать всех не могу. Вот:

Есть у них там выгрузка (написал один товарищ) и выложил всем. которая устраивает 1Сника. Там ему напильником делать особо нечего, только подсунуть мой запрос для выгрузки МНЕ НУЖНЫХ данных.

Работает эта шляпа так: Бухгалтер поработал, внес изменения в платежки (импортировал из банка или т.п.) если ЗАКОНЧИЛ на сейчас глобальные внесения. Жмет кнопку. Формируется файл с изменениями в платПоручениях.
я его забираю. грохаю.

Если бух забыл жмякнуть вовремя кнопку. То такой файл будет сформирован при закрытии 1С. (если бухгалтер забыл жмякнуть кнопку и держит 1с сутками открытую а там критические и срочные данные - это проблема бухгалтера, с начальством РЕШЕНО, карательные меры придуманы и будут доведены до пользователей)

Если я файл не грохнул(не забрал) еще, а изменения уже есть. Файл будет дописан... и так до посинения пока 1С при старте не увидит что файла НЕТ. С этого момента она (при изменениях и только при них) сформирует новый файл только с актуальными с последней версии файла(уже полученного мной) данными.


2. Вижу так: Файлы с удаленок летят в каталоги на сервере (ну не может 1Сник переименовать файлы)))) ему проще по каталогам их разложить).
Сижу (сервисом) на серваке: Курю бамбук и отъедаю ресурсы... бах. В каталоге XXX появляется файл "тоЧеНадо.xml". Стартую утилиту импорта с параметрами "d:\\xxx\тоЧеНадо.xml" и потащил его в GTT. Удачно унес? Ок. Переношу исходный файл в архив. Грохаю файл(сигнал 1с = я тебя понял, этот импорт получен. Следующий импорт с этого места)


Вот немного не ясно как поведет себя ГТТ когда 2 таких таблиц прилетит одномоментно... но это просто надо опытным путем на игрушке смотреть
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281208
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЩа обидно было.
А что бы было время на "пообижаться", сядь и не спеша продумай формат этих файликов.
Что тебе(!) потом было проще с ними разбираться и вносить изменения/дополнения при расширении данных/объемов и тп.
В опчем - речь про ТЗ одноЦешнику.

А не кидаться терминами, типа "в XML-формате".
Бо каждый это понимает по своему и доказать обратное ты не сможешь, если нету ТЗ.
А он, цешник, за тебя думать не будет и тем более лишнее напрягаться, кое и нафех ему не надо.
А ТЗ на экспорт/импорт утверди у начальства.
Штоп прикрыть свою точку G, если чё. ;-)
А это "чё", с 90% вероятностью наступит.

И потом бум вместе "обижаться" граммов эдак три-по-стописят. :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281209
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch...я вот не думаю, что 1С согласитс на ТЗ написанный автором

- а вот так можешь?
1C - нет.
- а в текстовый?
1c - возможно. Но не факт.
- а как можешь?
1с - ну XML родной формат.
- ну х*й с тобой пусть xml. а давать только измененную инфу с последнего импорта можешь?
1c - нет. Ну... быть может, если ты мне как в интернет магазинах будешь ответный файл давать че у тебя есть и сколько, а чего у тебя нет...
...
- Я вот тут порылся в вашей ё*аной ОдынЭс. Смотри если два плана выгрузки завести и следить ... вот так, так и так... вот ссылка на форум 1с там все что надо чувак сделал для стороннего интернет магазина. Обмен файлами. За актуальностью следит сам. Только вместо запроса товара надо чтоб выгружались платежки ВСЁ.
1с - эээ... ну я попробую. На одной базе... но не обещаю. И будет как у него xml.
- Дай ченить я уж разгребу формат. Все лучше чем к базам коннектиться...
1с - попробую к пятнице
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281212
Го-стхи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochГо-стхипропущено...

Сильно сомневаюсь, что план тут влияет, тем более по справочникам - думаю, время его построения находится за разрядной сеткой.

А если там сортировка без индексов? пока ВСЕ строки не выберешь - не отсортируешь...
Вообще речь шла про подготовку планов, а не выполнение запроса вместе с фетчем.
А про разрядную сетку - это значит, что величина настолько мала, что не помещается в отведенный вещественный тип (стремится к нулю, проще говоря :) )

По поводу PickList: если я правильно понимаю, сейчас весь справочник фетчится, перегоняется в stringlist и присваивается соотв свойству столбца грида? А почему бы не сделать Lookup, который будет связан с датасетом, фетча записи при необходимости? Да и фильтрацию можно запросами реализовать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281215
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogа давать только измененную инфу с последнего импорта можешь?
1c - нет.
Врёт. Ещё в 8.0 была штатная процедура экспорта только изменённых документов, используемая
для репликации.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281226
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovdgdogа давать только измененную инфу с последнего импорта можешь?
1c - нет.
Врёт. Ещё в 8.0 была штатная процедура экспорта только изменённых документов, используемая
для репликации.

Знаю, что лень ему (или некогда). У него отпуск с первого числа. Ребенок маленький. Баз по городу (на содержании) штук 20-30. Обновления постоянно летят. Везде разные версии... там допили, тут переработай тут напиши доп.обработку. А тут я такой "срочно кнопку. срочно импорт." Как бы понятно все. Про механизм "репликации" сам посмотрю и у него спрошу.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281231
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogСтартую утилиту импорта с параметрами "d:\\xxx\тоЧеНадо.xml" и потащил его в GTT. Удачно унес? Ок. Переношу исходный файл в архив. Грохаю файл

...............

Вот немного не ясно как поведет себя ГТТ когда 2 таких таблиц прилетит одномоментно... но это просто надо опытным путем на игрушке смотреть

Что-то у тебя с логикой работы GTT не складывается

Если "утилита импорта" будет только переносить в промежуточную табличку то они (временные таблицы) тебе не помогут ибо по завершении транзакции(коннекта) все данные в них грохнутся.

Если же "утилита" будет полностью обрабатывать все данные, т.е. пересла их в GTT и обработала (раскидала как надо и куда надо)
то тогда GTT это то что надо. Вот только при этом "Грохать файл" надо после обработки всех данных, а не после их переноса в GTT.

ну и по поводу "как поведет себя ГТТ когда 2 таких таблиц прилетит одномоментно" - хорошо поведет себя
тобишь об этом беспокоиться не надо "никто/ничего и не узнает"
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281238
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog- а вот так можешь?
1C - нет.
- а в текстовый?
1c - возможно. Но не факт.
- а как можешь?
1с - ну XML родной формат.
- ну х*й с тобой пусть xml. а давать только измененную инфу с последнего импорта можешь?
1c - нет. Ну... быть может, если ты мне как в интернет магазинах будешь ответный файл давать че у тебя есть и сколько, а чего у тебя нет...
... (скип)...
1с - попробую к пятнице

Как там у Классика?
- Вдарил раз. Специалист! Видно по нему....
:-)))
(Что, в опщем-то, и предполагалось по дефоулту.)

Раз ни как не магёт, пусть дельты пихает в отдельную таблю.
А если он и этого...
автор Не смогешь -- кого винить? --
Я должон тебя казнить.
Государственное дело --
Ты улавливаешь нить?..
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281244
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m...Если же "утилита" будет полностью обрабатывать все данные, т.е. пересла их в GTT и обработала (раскидала как надо и куда надо)
то тогда GTT это то что надо. Вот только при этом "Грохать файл" надо после обработки всех данных, а не после их переноса в GTT.

ну и по поводу "как поведет себя ГТТ когда 2 таких таблиц прилетит одномоментно" - хорошо поведет себя
тобишь об этом беспокоиться не надо "никто/ничего и не узнает"

Понял спасибо. Утилита ГТТ (планирую) по подключению. Т.е. Утилита подняла исходный файл, вживила данные в ГТТ. Запустила ХП. Доработала остатки напильником. Отдала команду перенести все что осталось из ТТГ в по табличкам. Проверила. Отпустила базу. Закрылась (эта версия ТТГ схлопнулась)... вроде так.

В какой момент грохать файл? Это же сигнал для 1с, что импорт получен. Вот я забрал данные и обрабатываю, а ну как 1С в имеющийся ещё файл чего дописать решит. Дописала, я не вкурсе. Обработал данные и грохаю файл. 1С ведь думает, что она мне и последние строчки передала... да...

Вижу: или дату изменения файла проверять перед импортом и в момент удаления файла (если не сошлись, то импорт переделать)
или тащить файл в темповую папку и оттуда имортировать уже. А 1с пусть дальше че хочет то и создает. (контроль папок сделать по таймеру, ну пусть раз в 5-10 минут. (чтоб если че успеть отработать прошлую версию точно такого же файла)

Вот это огород)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281246
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogСтартую утилиту импорта с параметрами "d:\\xxx\тоЧеНадо.xml" и потащил его в GTT. Удачно унес? Ок. Переношу исходный файл в архив.

Нет не так. Ты так и не понял что такое GTT и для чего оно предлагалось.

Правильно как-то так:
1. Стартую утилиту импорта с параметрами "d:\\xxx\тоЧеНадо.xml"
2. Start Trasaction
3. потащил его в GTT.
4. Следом запускаем ХП, которая проверяет дубликаты и раскладывает данные по полочкам.
5. Всё OK? Тогда COMMIT. Переношу исходный файл в архив.
6. Произошла ошибка? Тогда ROLLBACK, сообщаем об этом юзеру или тупо пишем в лог, а файл остаётся на своём месте или переносится в папку для корректировки.

В данном случае GTT это просто временный буфер для быстрой переливки данных как есть на сторону сервера, а уж в ХП он пусть разбирается что делать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281251
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogВ какой момент грохать файл?
Перед тем, как начнёшь читать из него данные.

То есть переименовываешь его, пробуешь открыть на эксклюзивный доступ и только если
получилось - начинаешь читать данные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281265
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис...
2. Start Trasaction...
...а уж в ХП он пусть разбирается что делать.

Болеменее понятно. Но ведь Start Trasaction ты явно указал - это если ГТТ по транзакии. Вот (ссу я если честно) на транзакцию вешать ГТТ... если намудрю с транзакциями. А я намудрю))) то не понятно чем дело кончится. Думаю ГТТ по сессии запускать. Стартанула утилитка. Подключилась к базе - вот рабочая ГТТ... и как не намудри с транзакциями, будет медленней, сильней загрузка ЦП, но хоть ГТТ будет жива. Закрылась утилитка. Потеряла коннект с базой. ГТТ списали в утиль. Вроде так (хотя НЕ ВНИКАЛ Я еще в ГТТ - это только между дел мысли)

Про ХП: всю логику проверок я в ХП не осилю. Тупо знаний не хватит внутренних возможностей и грамматики ХП. Мне лично, проще часть функций оставить за утилиткой импорта. пусть приложение соображает и кидает SQL запросы. Ну конечный контроль остается за приложением, прежде чем отпустить ГТТ
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281270
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovdgdogВ какой момент грохать файл?
Перед тем, как начнёшь читать из него данные.

То есть переименовываешь его, пробуешь открыть на эксклюзивный доступ и только если
получилось - начинаешь читать данные.


Разумно. Очень. И проверяем, что 1С отцепилась уже от файла. И файл из под носа 1С уже выдернут... годится.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281272
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зелёный свисток в воздух:
-А потом не получится, что еще дельту из дельто-файлов вылущивать надо?

Чёй-та не нравится мне енто ни фига...
Костыль к гипсу, который сполз с головы.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281281
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если в файлике ошибки?
Как алярмы бить, куда варнинги слать?
И определять "точку" ахтунга?
Ну штоп потом, после правки, опять с нее начать...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281282
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIneЗелёный свисток в воздух:
-А потом не получится, что еще дельту из дельто-файлов вылущивать надо?

Чёй-та не нравится мне енто ни фига...
Костыль к гипсу, который сполз с головы.

Как вариант вводить поле с датой изменения в 1с обговаривали. Тогда я храню датувремя последнего импорта и в след раз беру из файла только с момента последнего импорта... но пока отказались. Т.к. нашли решение поизящней(чужое правда, ну если 1сник сумеет переработать, то не суть).

Почему-то он не хочет обращаться к журналу. Там же есть (я почитал насколько смог) журнал изменений. Сказал, что это очень долгий и нудный запрос получится. Ну фик знает. Поживем увидим.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281283
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

а без ХП тебе GTT как собаке 5 нога. Нахрена сначала что-то закидывать на сервер, чтобы потом оттуда же и читать тоже самое, и вновь писать на сервер?

про транзакции http://www.ibase.ru/ibx/#tran_use
про возможности и синтаксис ХП Firebird_2_5_Language_Reference_RUS

И вообще без чтения документации и статей ничего хорошего у вас не выйдет.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281287
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIneА если в файлике ошибки?
Как алярмы бить, куда варнинги слать?
И определять "точку" ахтунга?
Ну штоп потом, после правки, опять с нее начать...
Если в файлике ошибка. Кричим бухам АХТУНГ. Вот вам бухи ручной импорт (выбираете базу. Выставляете дату с ... по... Жмете импорт) По СОМ соединению со сверкой всех платежек за данный период. Вот вам бухи сисадмин - спросите с него почему файл битый мож вирус, а мож при бэкапе ночном че произошло? Вот вам бухи 1Сник спросите с него почему файл неправильно сформирован. Ну вы тут разбирайтесь, а я пошел кофе пить ибо моя прога 150тыщ раз эти файлы читала, читает и читать будет... Был бы правильный формат (и косо посмотреть на 1Сника) и не битый файл(и косо глянуть на сисадмина). Утрированно конечно, но как-то так. Чето за*бало за все отвечать и все предвидеть. Мнеб свой фронт работ осилить
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281294
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog, мне все равно не нравиться.
Слишком много не определённостей, от меня (так сказать) не зависящих.

Нешта бы 1Цшик лил дельты в отдельную Таблю.
Ни какой тебе пакетной обработки (со всем прелестями сего действа).
Тихо-мирно, степ бай степ, по строчно.
Отработал строку, пометил "фтопку ее".
Перешел к следующей.
Чем тебе не "персональный журнал изменений" для прикрытия точки G?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281296
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

а без ХП тебе GTT как собаке 5 нога. Нахрена сначала что-то закидывать на сервер, чтобы потом оттуда же и читать тоже самое, и вновь писать на сервер?

про транзакции http://www.ibase.ru/ibx/#tran_use
про возможности и синтаксис ХП Firebird_2_5_Language_Reference_RUS

И вообще без чтения документации и статей ничего хорошего у вас не выйдет.

"а без ХП тебе GTT как собаке 5 нога. "
Тут недопонимаю. Надо мне из двух таблей ГТТ и рабочей выбрать дубли и грохнуть их в ГТТ. Условия могут быть разные. Логика формирования условий как бы есть в приложении-импорта. Собрать такую логику в ХП мне сложно. Сформировать Delete с конкретными условиями в Query как два пальца. Да чуть дольше в выполнении. (сборка и т.п. но логика дольше обрабатывается) Но на клиент же данные не полетят. Отсылаю Delete *** на сервер. И сервер сам уже там шуршит между таблицами. Не прав, стукните.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281299
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogКричим бухам АХТУНГ.
Вот вам бухи ручной импорт...
Вот вам бухи сисадмин...

- Сам бушь по комнатам за ними бегать и объяснять куда им бежать?
А комп она мошь ва-аще вырубила из 220, ушла в декрет и тп.
- Тогда чё?
- Пипец, ты приплыл как кур в ощип...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281309
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogСформировать Delete с конкретными условиями в Query как два пальца. Да чуть дольше в выполнении. (сборка и т.п. но логика дольше обрабатывается) Но на клиент же данные не полетят. Отсылаю Delete *** на сервер.

а теперь посчитай сколько раз ты такие сформированные delete на сервер отошлёшь.

Ну не хочешь ХП, может тебе и MERGE подойдёт. Хотя с такой боязнью SQL тебе и его не осилить.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281311
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LInedgdogКричим бухам АХТУНГ.
Вот вам бухи ручной импорт...
Вот вам бухи сисадмин...

- Сам бушь по комнатам за ними бегать и объяснять куда им бежать?
А комп она мошь ва-аще вырубила из 220, ушла в декрет и тп.
- Тогда чё?
- Пипец, ты приплыл как кур в ощип...

А варианты? Заменить собой 1сника, сисадмина и бухгалтера?

У меня есть формат даннх экспорта, который дал 1сник (сам отступил, сам отвечает, и пофиг что при обнновлении что-то там слетело, мое какое дело?... я что СкайНет должен запустить, чтоб все проблемы предвидела и если че отправляла терминаторов на разборки) Вот архивы прошлых экспортов из 1С все норм - а тут вата понеслась.


Есть Сисадимин. Он дал папки. Объем диска согласовали. Хранение БэкАпов этих папок на нем. Ну пусть следит за вирусами, бэдблоками и т.п.

Есть бухгалтер который ведет свою тему. Ушла в декрет,в отпуск, в морг оставь напарницу, введи в курс дела. Нет!? К директору и там разбирайтесь кто кнопку не нажал и почему.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281322
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogА варианты?

Я уже не раз сказал про Таблю-Дельт.

dgdogУ меня есть формат даннх экспорта, который дал 1сник
А ты за чем и зачем их брал, эти файлики? ;-)

Пусть 1Цшник ведёт Таблю-Дельт именно в этом формате. :-)

Какая в попу ему разница - в файло или таблю?
В таблю всяко проще и, заметь, всем(!) спокойнее.
Чем гемор екпорт_ымпорт через промежуточный формат с временным хранением.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281330
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIne...Пусть 1Цшник ведёт Таблю-Дельт именно в этом формате. :-)


Про таблю-Дельт я тут не очень понимаю. Это то что он отдал в экспорт? И с какого места дальше пойдет экспорт?
Это предусмотренно в варианте с его выгрузкой по "плану выгрузок". Там потому два "Плана выгрузок" и используется, что контролят друг друга... Но мне с этой табли вообще не легче при падении экспортного файла по ошибке. Я САМ до этой табли не доберусь и никому ничего не докажу. 1сник быстрей её подправит)))) Но скорее всего я чего-то не догоняю про Таблю-Дельт
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281341
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIne...А ты за чем и зачем их брал, эти файлики? ;-)

Потому что программер на 1с такой же программер (ну пусть по Вашему кодер;) ) как и я. Ну удобней ему так, в таком формате. Не обломлюсь. ЕСли меня окончательно не устроит, думаю найдем общее решение. Серединку- на половинку. Времени у него перед отпуском нет. Все лучше чем он скажет "НЕТ - это не возможно" и буду COMмами по базам скакать.

ПС Да сегодня запустил по 20 баз одновременно)))) Ну то, что я бухгалтерию отправил чай пить это фигня. Но я еще и отожрал порядочную часть лицензий 1С )))) Народ нервно соображал, что происходит. Сидел молчал в тряпочку. Больше так делать не буду. Но да, ваши ребята советы и те статьи которые успел почитать, про Query, Транзакции... разгрузил ЦП. Не прям вооооообще, но разгрузил. Спасибо.

Уперся теперь во время подключения COM. В количество лицензий 1С. И то что COM соединение еще живет 15-20 минут после того как я его бросил (если были проводки), но в последнем, скорее всего надо делать какой-то выход, а не просто бросать соединение и делать новое.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281343
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открой для себя race condition
https://ru.wikipedia.org/wiki/Состояние_гонки

и про понятие "атомарности операций" почитай

dgdogСижу (сервисом) на серваке: Курю бамбук и отъедаю ресурсы... бах. В каталоге XXX появляется файл "тоЧеНадо.xml". Стартую утилиту импорта с параметрами "d:\\xxx\тоЧеНадо.xml" и потащил его в GTT.

при этом параллельно чтению файла утилитой импорта одновременно 1С пишет в файл, а твоя утилита его читает, хотя он еще до конца недописан.
результат плохо предсказуем, с какой ноги сегодня сервер встал - так и будет меняться поведение.


dgdogУдачно унес? Ок. Переношу исходный файл в архив. Грохаю файл(сигнал 1с = я тебя понял, этот импорт получен. Следующий импорт с этого места)

1. 1С пишет данные, медленно и печально, написало для примера 800 строк
2. В этот момент просыпается утилита импорта и начинает это всё импортировать. Это тоже не мгновенно происходит.
3. Пока она импортирует, 1С записывает еще сотню строк.
4. Но утилита импорта считала файл, пока в нём было ещё только 800 строк и строки 800-900 не видит
5. Утилита заканчивает импорт 800 строк и удаляет файл с 900 строками
6. 1С видит, что файл обновлен, и строки начиная с 901-й пишет в новый файл
7. Итого - строки 800-900 никуда не попали и были выкинуты



Еще почитай про https://en.wikipedia.org/wiki/Multiple_buffering

Когда ты играешь музыку у звуковой карты есть несколько буфферов.
Один из них она гонит на динамики и никто болше не имеет права его трогать.
В другой буффер плеер распаковывает звук из муз-файла и никто этот буфер больше не трогает.
Когда звуковая карта доедает старый буфер - ей подсовывают следующий уже готовый, а отыгранный буфер ставят в очередь на заполнение новыми данными.
Но никогда писатель (mp3 плеер) и читатель (звуковая карта) не суются в один буфер. Или один из них или другой не имеет а это права.

То же самое с видеокадрами в игрушках-стрелялках, один буффер показываем, другой буффер строим, когда гтово делаем атомарный flip-flop



Ещё почитай про мнгопоточность - MPI, Erlang, Actor Model
Общее правило - любой пакет данных (переменная, работающая функция, файл и т.д.) принадлежит только ОДНОМУ рабочему. Когда одни рабочий передает пакет другому - он теряет если не доступ к пакету, то возможность его изменять как минимум.

В твоем примере - пока есть шанс, что 1С может писать в файл, импортер не имеет права его трогать.
А чтобы у импортера появилось право читать файл - 1С должно тот файл финализировать и переключиться на другой новый файл.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281365
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogПро таблю-Дельт я тут не очень понимаю.

В эту таблю (а не "файл экспорта") записываются изменения вносимые бушками.
По кнобке, автоматом али "по плану выгрузок" - сути не меняет.
Главное что бы ты мог до нее добраться своей софтинкой.

Это решает твою засаду из начального посыла - приходиться самому рыскать в поисках дельт.

Твоя софтинка периодически лезет в нее, читает все (или часть) New-записей, обрабатываем и помечает их как отработанные.

Ни какого гемора с промежуточным "носителем", парсингом, откатами данных, обработки ошибок.

Практически тот же "журнал". :-)
Но, так сказать, для ДСП.
Ее, таблю-дельт, можно/нужно и зачищать (периодически) от старья безбоязненно.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281366
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch...

1. 1С пишет данные, медленно и печально, написало для примера 800 строк
2. В этот момент просыпается утилита импорта и начинает это всё импортировать. Это тоже не мгновенно происходит.
3. Пока она импортирует, 1С записывает еще сотню строк.
4. Но утилита импорта считала файл, пока в нём было ещё только 800 строк и строки 800-900 не видит
5. Утилита заканчивает импорт 800 строк и удаляет файл с 900 строками
6. 1С видит, что файл обновлен, и строки начиная с 901-й пишет в новый файл
7. Итого - строки 800-900 никуда не попали и были выкинуты



Да об этом сегодня задумался на пару минут, между дел. Решение вижу:
1. Увидел файл. Пробую получить монопольный доступ. Переименовываю. 1с его потеряла, пусть пишет следующий, а я с этим разберусь пока.
2. Увидел файл. Пробую утащить его в темпПапку. 1С пусть куда хочет пишет
3. если первые два метода не сработают. Ну ок. Увидел файл. Считал датувремя последнего изменения. Хватаю файл - импортирую. Перед удалением файла проверяю датувремя последнего изменения. Даты не сошлись ПЕРЕИМПОРТИРОВАТЬ. Ошибка при загрузке импорта (не хватает ноды или типа того) = переимпортировать по таймеру через 2 минуты. Сошлись? Удалить файл

Жду варианты файлов которые даст 1Сник. Потом буду серьезно думать и искать возможные грабли. Xml - одно, текстовый файл другое, DBF вообще третье.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281367
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog1. Увидел файл. Пробую получить монопольный доступ.

предположим, не получилось, что тогда ?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281368
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

хрень.
Пусть 1С сначала импортирует файл во временный каталог и как закончит переносит его в основной, который твой сервис уже будет смотреть и пытаться брать его с экслюзивным доступом.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281372
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogВсе лучше чем он скажет "НЕТ - это не возможно" и буду COMмами по базам скакать.
А фигле ему грить "Нет", если он согласился на файл экспорта?
Тебе не надо будет скакать по 20 базам одновременно, а только в Таблю-Дельт залесть.
И лицензию слопаешь только одну.
:-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281377
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LInedgdogПро таблю-Дельт я тут не очень понимаю.

В эту таблю (а не "файл экспорта") записываются изменения вносимые бушками.
По кнобке, автоматом али "по плану выгрузок" - сути не меняет.
Главное что бы ты мог до нее добраться своей софтинкой.

Это решает твою засаду из начального посыла - приходиться самому рыскать в поисках дельт.

Твоя софтинка периодически лезет в нее, читает все (или часть) New-записей, обрабатываем и помечает их как отработанные.

Ни какого гемора с промежуточным "носителем", парсингом, откатами данных, обработки ошибок.

Практически тот же "журнал". :-)
Но, так сказать, для ДСП.
Ее, таблю-дельт, можно/нужно и зачищать (периодически) от старья безбоязненно.

Ну вкурил наконец-то. Это то что мне 1Сник предлагал: А ты мне как в интернет магазине ответный XML формируешь что прошло, что импортировал. Но пока от этого отказались, очень уж занимательна теория выгрузки "двумя планами выгрузки" 1С лишнего не даст, сама контролирует это. Лишняя движуха с дельтами и дельтой дельт))) избыточна. Пойдет косяк с конкретной базой (будет конечно когда-то) импорт в ручном режиме исправит от точки, до точки (он какбы и формирует дельты, сверяет чего есть, чего нет за период и добавляет, исправляет - работает зараза медленно. Но работает)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281382
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochdgdog1. Увидел файл. Пробую получить монопольный доступ.

предположим, не получилось, что тогда ?

Таймер. Офф-Он. Через пят минут захожу в каталог "о файл лежит! Берем. Переименовываем". Не получилось?! Таймер. Офф-Он.
За пару суток нет импорта из этой БД. Бухи прибегут. Ищем, каталог, ищем файл, разбираемся.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281383
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисdgdog,

хрень.
Пусть 1С сначала импортирует файл во временный каталог и как закончит переносит его в основной, который твой сервис уже будет смотреть и пытаться брать его с экслюзивным доступом.

Логично. С 1с не знаком. В ней это сложно интересно реализовать? Попрошу 1сника
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281393
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogЭто то что мне 1Сник предлагал: А ты мне как в интернет магазине ответный XML формируешь что прошло, что импортировал.

- Не-а... :-)
Ни кто ни кому ни чего не шлет.
/Если только не по конкретному адресу. :-)))/

Его дело, 1Цшника, записать в эту таблицу и забыть/забить. Всё, он передал как в твою зону ответственности.
Твое дело - считать их нее данные и перелопатить.
С тебя тошь взятки гладки: - Какие данные получил, то и перелопатил.
А пральные они или нет - это в 1Цшнику. Бо нефех всякую кАку пихать.

Чёткое разделение зон ответственности и ни каких лишних телодвижений.


А то взяли моду - слать друг другу XML-ки, туда-сюда...
Главное - высоко содержательные:
- Ну ты чё?
- Я ничё, а ты чё?
:-))))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281457
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

ты бы заканчивал с флудом, а то зрители уже уставать начали :)

"А дальше что? Дальше ваши рыжие кудри примелькаются, и вас просто начнут бить."(с)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281470
igs123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там, где замешана 1С (и 1С основная программа для работы конторы) - лучше все делать в ней, одни только периодические реквизиты чего стоят - в том смысле на 1С это удобно, а реализовать это в мелких утилитах муторно - не стоит оно того...

Но если уж надо продолжать поддержку, то обговори с админом и эсником такой вариант:
результаты выборок с баз необходимо слать по эл. почте (автоматизировать отправку по мэйлу для 1С это тоже не проблема),
почтовик на основе темы письма выкладывает прикрепленный файл в определенную папку
ну и далее как желаешь

Плюсы сам наверное видишь - выгрузки не теряются (конечно если почтовый ящик не почистят), можно отслеживать "забывающих" высылать выгрузки и т.п.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281631
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поигрался немного с ГТТ. Возник вопрос стоит ли делать индексы изначально на ГТТ? На малом объеме данных не ощутил разницы. Предполагается ипользовать ХП, Delete, Select и Merge к этой табличке. Сейчас в ГТТ (при каждой копии) летит 20-50 записей. Но хочется избежать граблей через год-два-три если объемы возрастут.

Хотелось бы ответ от практиков. И еще, а Как ведет себя триггер gen_id(ГТТ_id,1)? Используете ID поле в ГТТ? (так-то нафиг не нужно, но опять могу лажануть и чего-то не продумать)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281664
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogКак ведет себя триггер gen_id(ГТТ_id,1)?

также как и для обычных таблиц.

dgdogВозник вопрос стоит ли делать индексы изначально на ГТТ? Используете ID поле в ГТТ?

всё зависит от того что ты делаешь с этой GTT. Отсюда не видно

dgdogСейчас в ГТТ (при каждой копии) летит 20-50 записей.

Это вообще ни о чём. У людей по 100000 записей и даже больше без труда обрабатываются
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281750
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog Как ведет себя триггер gen_id(ГТТ_id,1)? Используете ID поле в ГТТ?

Это не триггер, это функция, и онa вообще не использует никакие таблицы, а работает напрямую с генеpатором "ГТТ_id"

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

Ты можешь с одного генератора брать номера дя разных таблицы, если хочешь. Или вообще не использовать его значения для номеров, а для чего-то другого (например остановки длинных select'ов).

В SQL-стандарте и большинстве других серверов (где она вообще есть) аналогичная штука делается называется SEQUENCE и NEXT VALUE FOR <sq-name>
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281776
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochВ SQL-стандарте и большинстве других серверов (где она вообще есть) аналогичная штука делается называется SEQUENCE и NEXT VALUE FOR <sq-name>

В Firebird начиная с 2.0 точно также. GENERATOR оставлено для обратной совместимости.
А вот gen_id даёт чуть больше чем NEXT VALUE FOR, что с одной стороны хорошо (особенно при массовых INSERT), а с другой может привести к тому что генератор могут декрементировать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39281787
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Знаю, но при этом забыли current value
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39350169
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знач так: ВСЕМ спасибо кто пинал в нужную сторону. Переработал логику полностью. Если помните то работал построчно "в каждом импорте"... переработал логику так:
Бегу по базам(экспорта) забираю к себе все данные - обрабатываю оптом во временной таблице (МЕРГЕ, ДОИН и т.п) СПАСИБО ЧТО ПНУЛИ В НУЖНУЮ СТОРОНУ. Время импорта из баз 1С сократил с полутора часов до 20и минут )))
потерял немного в зарплате(за срыв сроков), но решение мне нравится - круче ХРЕН кто сделает))) допиливаю мелочи.
Есть вопрос пинайте:
Есть таблица в которой есть столбец NAMEBLYAD со значениями:
Вася Пупкин
Вася Пупкина
Вася Мупкин


Надо получить:
Пупкин Вася
Пупкина Вася
Мупкин Вася

Вопрос: "Вася" срезать у меня получается, а вот перезаписать...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39350174
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой не знаю как добавить или исправить))) Парни: вопрос КАК ВАСЮ ПУПКИН превратить в ПУПКИН ВАСЯ чисто одним запросом... (ну мозгов не хватает...)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39350178
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogой не знаю как добавить или исправить))) Парни: вопрос КАК ВАСЮ ПУПКИН превратить в ПУПКИН ВАСЯ чисто одним запросом... (ну мозгов не хватает...)
- О как! Тебя меньше жив, чем задавлен бюстгалтериями. :-)
То есть "Притвет!". ;-)

По сути: - Фигней не майся, да.
Не просто так есть ФирстНаме, ЛастНаме и даже МидлНаме.
100500 раз рассматривали на примере принятой в РФ системе именований резидентов.
В частности - сложносоставные и сложноподчиненные, а не только ФИО.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39350179
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абы не тереть 100501 раз - вот те тынц
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39350181
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39351779
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdog,

На клиенте, наверно, проще. Но если хочется именно FB, то есть функция POSITION, находишь номер пробела, а дальше используешь SUBSTRING. Может ещё придётся использовать TRIM, но это нужно проверять.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39351783
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
$10 и я готов потратить 10 минут обеда на написание хп.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39351823
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky$10 и я готов потратить 10 минут обеда на написание хп.
А кто потом будет издержки покрывать будет, ась?
- Ыстчо один нечетатель. :-)
- Абисняю...
Что "Иван Програмерыч Писаревский", что "Писаревский Иван Програмерыч" - морда лица физическая (в окошке кассы для ЗП) - одна и та же.

Но Сон Он Чи и Он Чи Сон - два разных человека, резидента РФ.

А теперь растолкуй мне, бест_талковаму, как ты такое разрулишь?
По кол-вы пробелов - иди и чти тынцы выше с конкретными примерам....
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39351864
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть тз:
dgdogЕсть таблица в которой есть столбец NAMEBLYAD со значениями:
Вася Пупкин
Вася Пупкина
Вася Мупкин


Надо получить:
Пупкин Вася
Пупкина Вася
Мупкин Вася
Di_LIneА теперь растолкуй мне, бест_талковаму, как ты такое разрулишь?Ничего не буду, нашел строку с двумя словами, поменял местами слова, если слов не 2, то на выход отправляется строка из входа. Строка с тремя словами это другое тз и цена другая.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39352087
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,

ХП не нужна. И вообще надо быть добрее. Просто бесплатно помочь человеку. в следующий раз он сам подумает и сделает.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39352091
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kreatorxxi!
You wrote on 22 ноября 2016 г. 17:33:43:

Kreatorxxi> в следующий раз он сам подумает и сделает.нет

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39352167
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот кстати да, Абрамович - это отчество или фамилиё ?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39352184
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

у меня есть знакомый с фамилией Кузьмич
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39352197
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyСтрока с тремя словами это другое тз и цена другая.
Остап Сулейман Берта Мария Бендер-бей? :-)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39352472
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIneОстап Сулейман Берта Мария Бендер-бей? :-)Для обсуждения ТЗ предлагаю почасовую ставку.
KreatorXXIПросто бесплатно помочь человеку.Здесь бесплатно помогаю почти всем, вопрос в том, что тем кто не хочет сделать даже 5% работы помогать как-то неинтересно. Был бы предложен кусок кода, хоть и неправильный, наверняка его бы уже отладили и указали на грехи.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39352518
Фотография Di_LIne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyДля обсуждения ТЗ предлагаю почасовую ставку.
- Дипу_тат.... :-)))
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39353354
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochвот кстати да, Абрамович - это отчество или фамилиё ? Национальныё принадлежность
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39353355
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Di_LIne- Дипу_тат.... :-)))
одноман... одноманда... одномандатник!
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366189
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Di_LIneIvan_PisarevskyСтрока с тремя словами это другое тз и цена другая.
Остап Сулейман Берта Мария Бендер-бей? :-)

Да. Мне бы принцип понять: как одним запросом переместить подстроку(в конец вчастности). Т.е. встретилось "Сулейман" унес в конец строки "Сулейман - турецкоподданный". Ну по сути надо по справочнику "ООО, ЗАО, НПО" встречающиеся в начале записи утащить в конец (стеб в нужную сторону приветствуется) Жгите парни, уже не слабо помогли.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366193
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_devAriochвот кстати да, Абрамович - это отчество или фамилиё ? Национальныё принадлежность

Стебётесь чтоли? Абрамович - это... это призвание
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366208
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogDi_LIneпропущено...

Остап Сулейман Берта Мария Бендер-бей? :-)
Ну по сути надо по справочнику "ООО, ЗАО, НПО" встречающиеся в начале записи утащить в конец (стеб в нужную сторону приветствуется)
Не может быть, чтобы ты не додумался до
Код: sql
1.
select left('ЗАО Вася Пупкин', position(' ', 'ЗАО Вася Пупкин')-1) from rdb$database
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366210
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисArioch,

у меня есть знакомый с фамилией Кузьмич

С фамилией то я справлюсь. А вот как "ООО РастудытьТебяВКачель" превратить за один раз в "РастудытьТебяВКачель ООО" чето мозгу не хватает))) Для меня даже пробел есть после "ООО ". Но мозгов не хватает... чтоб одним запросом. Подзапрос по справочнику я сам составлю... мнеб принип... можно со стебом-шутками-прибаутками.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366211
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineНе может быть, чтобы ты не додумался
В смысле - где подвох?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366217
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miwaonlinemiwaonlineНе может быть, чтобы ты не додумался
В смысле - где подвох?

По моему стебётся. Или немного обидно... или пните ещё раз
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366219
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogmiwaonlineпропущено...

В смысле - где подвох?

По моему стебётся. Или немного обидно... или пните ещё раз
Кхм. Ведь это - решение задачи, нет?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366220
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miwaonlinedgdogпропущено...

Ну по сути надо по справочнику "ООО, ЗАО, НПО" встречающиеся в начале записи утащить в конец (стеб в нужную сторону приветствуется)
Не может быть, чтобы ты не додумался до
Код: sql
1.
select left('ЗАО Вася Пупкин', position(' ', 'ЗАО Вася Пупкин')-1) from rdb$database



А подожди на копии попробую... Упдате И твой Select left...
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366226
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miwaonlinedgdogпропущено...


По моему стебётся. Или немного обидно... или пните ещё раз
Кхм. Ведь это - решение задачи, нет?
не катит "Invalid length parameter -1 to SUBSTRING. Negative integers are not allowed."

чую беда в том, что не везде есть пробел. есть просто названия одним словом. Нууу... буду копать в эту сторону.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366238
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdogmiwaonlineпропущено...

Кхм. Ведь это - решение задачи, нет?
не катит "Invalid length parameter -1 to SUBSTRING. Negative integers are not allowed."

чую беда в том, что не везде есть пробел. есть просто названия одним словом. Нууу... буду копать в эту сторону.

Решил пока так (опытным путем) select left(POLE, position(' ', POLE)-1) from (select POLE from TABLE where POLE like '% %');

Иначе вылетает с ошибкой на первом значении без ПРОБЕЛА. Буду копать в ту сторону. СПАСИБО. Хотя мое решение не красивое... должно быть проще
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366248
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogmiwaonlineпропущено...

Кхм. Ведь это - решение задачи, нет?
не катит "Invalid length parameter -1 to SUBSTRING. Negative integers are not allowed."

чую беда в том, что не везде есть пробел. есть просто названия одним словом. Нууу... буду копать в эту сторону.

Код: sql
1.
select left('ВасяПупкин', maxvalue(position(' ', 'ВасяПупкин') - 1, 0)) from rdb$database


Вместо 0 в maxvalue можно передать 32768, char_lenth() или что-то другое по вкусу.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366249
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineВместо 0 в maxvalue можно передать 32768, char_lenth() или что-то другое по вкусу.
Упс, психанул. По условию задачи - нельзя :)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366253
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miwaonlinemiwaonlineВместо 0 в maxvalue можно передать 32768, char_lenth() или что-то другое по вкусу.
Упс, психанул. По условию задачи - нельзя :)

Вкурил. Расковыряю. Спасибо. Я все равно со справочником сверяю. Спасибо.

А вот совсем другой вопрос: Вот есть у меня клиент который отсылает UPDATE и на 5-10 минут замирает (хотя ему эти данные сейчас не нужны). Если я перенесу это УПДЭЙТ в хранимую процедурку - клиент будет виснуть? Какие решения ПРАВИЛЬНЫЕ?
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366261
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogА вот совсем другой вопрос: Вот есть у меня клиент который отсылает UPDATE и на 5-10 минут замирает (хотя ему эти данные сейчас не нужны). Если я перенесу это УПДЭЙТ в хранимую процедурку - клиент будет виснуть? Какие решения ПРАВИЛЬНЫЕ?

Будет виснуть..

Чтоб интерфейс не замирал - надо перенести этот update в отдельный поток или отдельное приложение. Какой именно вариант в твоих условиях подходит лучше - тебе решать.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39366271
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miwaonlinedgdogА вот совсем другой вопрос: Вот есть у меня клиент который отсылает UPDATE и на 5-10 минут замирает (хотя ему эти данные сейчас не нужны). Если я перенесу это УПДЭЙТ в хранимую процедурку - клиент будет виснуть? Какие решения ПРАВИЛЬНЫЕ?

Будет виснуть..

Чтоб интерфейс не замирал - надо перенести этот update в отдельный поток или отдельное приложение. Какой именно вариант в твоих условиях подходит лучше - тебе решать.
Ясно. Спасибо. Совсем не "базист" И база не моя... перекраиваю. Сейчас выкрутился отключением Контрола... а вообще надо переписывать. Код бы разобрать.))) Но разберем))) Фигня-война, не в такие дали шагали. Спасибо ребят за подсказки
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39367113
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogА вот как "ООО РастудытьТебяВКачель" превратить за один раз в "РастудытьТебяВКачель ООО" чето мозгу не хватаетНайти все строки, где позиция символа "пробел" ненулевая, откусить сабстрингом все то, что до позиции первого пробела и откусить все что после первого пробела, потом вторую часть пристегнуть к первой операцией "||".
miwaonlineЧтоб интерфейс не замирал - надо перенести этот update в отдельный поток или отдельное приложение.йа йа, оно. свой коннект, своя транзакция в отдельном треде и вперед.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39367164
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskyсвой коннект, своя транзакция в отдельном треде и вперед

Это необязательно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39367225
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovIvan_Pisarevskyсвой коннект, своя транзакция в отдельном треде и вперед

Это необязательно.Зато работает ожидаемо. Как только начинаешь экономить "на спичках", обязательно получишь граблями по лбу.
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39372443
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyDimitry Sibiryakovпропущено...

Это необязательно.Зато работает ожидаемо. Как только начинаешь экономить "на спичках", обязательно получишь граблями по лбу.

я вот не базист( не птичник совсем)... но отвечу со своей колокольни(если можно): так ведь от задачи зависит
мне проще было создать сервис и закинуть на сервер: сработало "чудо правило" апдейтим таблицы по принятым условиям. (Клиент этого не чувствует) Вываливаемся с ошибкой (клиенту знать об этом не надо) - ну и фиГ сним... пробуем повторить или вообще сигналим винде "Алярм блин, алярм падла, свистать всех на верх" - отбиваем "вопрос"

С тредами у мена (вот это личное) есть не понятки: Вот случилась ошибка и выдаем ЕррорБлинЁпрст... но у меня не всегда выдает если пользователь уже закрыл программу (ну на Вин 10 и Ембаркадеро 2007 у меня с тредами подключенными к 1С8.3 беда) и отработать ошибки не получается... да и пользователь глючит если что не так.

Вариантов вижу 3
1: тред (теоретически самое правильное)
2: на самый жуткий запрос (на 5-20 минут работы) запускать стороннюю подпрограмму.
3: сервис. Которому командуем чего там на сервере надо поправить (апдейтить, удалить, апгрейдить)


ПС наверное многое можно сделать в UDF или встроенными процедурами (но на форуме говорят, запуск процедуры так же затормозит клиента...) А в UDF я только пытаюсь вникнуть :)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39372450
dgdog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dgdog,

фигню сморозил )))

Код: pascal
1.
// так ведь от задачи зависит


хорошо, что не успели в грязь вкатать))
конечно зависит от знаний-возможностей программиста. Ну и от условий. Методы разные, но главное достичь цели минимальными затратами (времени, памяти, процессора... ну и программиста)
...
Рейтинг: 0 / 0
Delphi, FireBird создать таблицу в памяти клиента
    #39372724
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dgdogС тредами у мена (вот это личное) есть не поняткиНормально с ФБ работать из тредов, у нас и из С прямо с АПИ и с дельфи с фиб-ами, и под линуксами и под виндами. Не надо тень на плетень наводить. Если есть проблема с тредами, то тебе лучше в дельфовый форум сходить, получить помощь вполне реально.

dgdogПС наверное многое можно сделать в UDF или встроенными процедурами (но на форуме говорят, запуск процедуры так же затормозит клиента...) А в UDF я только пытаюсь вникнуть :)Это вообще перпендикулярно теме обсуждения. "Слышал звон..." (с).
...
Рейтинг: 0 / 0
368 сообщений из 368, показаны все 15 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Delphi, FireBird создать таблицу в памяти клиента
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]