Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблемы с node-firebird-drivers / 25 сообщений из 77, страница 1 из 4
31.12.2018, 18:03
    #39755295
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Спрошу на всякий случай, может кто использует драйвера для nodejs отсюда:

https://github.com/asfernandes/node-firebird-drivers

Постоянно сталкиваемся с проблемами. Node падает вместе с драйвером с кодами выхода 3221225477 и 3221226505. Это access violation и stack overflow. Разработчик пока не сильно помогает. Похоже, что никто интенсивно этот драйвер не использует.

PS: может кто сталкивался, насколько трудоемок будет процесс самому установить MS Visual Studio, перекомпилировать драйвер, подключить его в Node и проверить что к чему?
...
Рейтинг: 0 / 0
31.12.2018, 18:09
    #39755298
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22,

ну ты время нашёл к разработчику обращаться. Через 3-4 дня обратись
...
Рейтинг: 0 / 0
31.12.2018, 18:13
    #39755300
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22Похоже, что никто интенсивно этот драйвер не использует.

Никто интенсивно не использует nodejs. Назачем было выбирать такую экзотику? Решили
сэкономить на программистах, набрав школьников, поднаторевших в JavaScript? Так школьники
с PHP не дороже.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.12.2018, 18:44
    #39755301
Коваленко Дмитрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Симонов Денисsysdba22,

ну ты время нашёл к разработчику обращаться. Через 3-4 дня обратись

Нормальное время.
...
Рейтинг: 0 / 0
31.12.2018, 21:02
    #39755314
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22Спрошу на всякий случай, может кто использует драйвера для nodejs отсюда:

https://github.com/asfernandes/node-firebird-drivers

Постоянно сталкиваемся с проблемами. Node падает вместе с драйвером с кодами выхода 3221225477 и 3221226505. Это access violation и stack overflow. Разработчик пока не сильно помогает. Похоже, что никто интенсивно этот драйвер не использует.

PS: может кто сталкивался, насколько трудоемок будет процесс самому установить MS Visual Studio, перекомпилировать драйвер, подключить его в Node и проверить что к чему?Зачем студия? Драйвер на TypeScript написан
...
Рейтинг: 0 / 0
31.12.2018, 21:05
    #39755315
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Там есть модульные тесты - надо их прогнать и посмотреть результат
...
Рейтинг: 0 / 0
13.01.2019, 17:22
    #39759012
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Пока вроде подправили у себя, ошибки пока нет. Дальше будем смотреть. На nodejs остановились по следующим причинам:

За спиной 25 лет опыта Pascal - Delphi - Firebird. Платформа на 1.6 млн строк исходного кода + сотни прикладных решений на её базе.

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

Почему решили смотреть на nodejs:

1. Изоморфный код. Т.е. один и тот же код может крутиться как в браузере, так и на сервере. Это важно, так
как остается свобода выбора -- можно выполнять некоторую задачу на сервере, можно на клиенте. Код один,
компоненты одни и т.п.

2. Удобно для небольшого колектива разработчиков так как не надо делить на фронтов и бэков.

3. В нашей платформе пользователь имеет возможность настраивать алгоритмы/вычисления под себя. Мы стараемся максимально включить декларативное описание и блок схемы, но все равно придется и просто код писать. Возникает вопрос на чём?
В нашей существующей платформе мы используем VBScript, который удобен своим примитивизмом. Т.е. даже далёкий от
серьезного программирования человек способен быстро усвоить пару простых понятий и начать программировать
алгоритмы. Но VBScript встроен в Windows, а на остальных платформах его нет... Возникает вопрос, что использовать?
И тут Java Script всегда под рукой. Мы ведь работаем в браузере, где он есть всегда, а nodejs позволяет его использовать и на
сервере.

Но, я сейчас провожу обширные тесты и честно говоря не в восторге от nodejs.

Скорость! Эта штука крайне медленная. Я сравниваю доступ к БД Firebird с Делфи и позже выложу сюда результаты.
Они удручают, сразу скажу.

Длительные вычисления необходимо выносить в child_process со всеми вытекающими проблемами.


Может кто-то из присутствующих здесь имеет опыт решения подобных задач в современных реалиях? Я с большой признательностью выслушаю советы. Возможно, есть удобное и признанное решение, которое я просто не знаю.
...
Рейтинг: 0 / 0
13.01.2019, 17:35
    #39759014
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22Удобно для небольшого колектива разработчиков так как не надо делить на фронтов и бэков.

преимущество сомнительное. Тем более что всё равно на клиентской стороне приходится знать дополнительно CSS и html.
Язык то вроде один, но вот уровни владения разные. В браузерах надо думать о том, а будет ли сия возможность поддерживаться, ибо уровни соответствия ECMA 6 везде разные, некоторые и дальше 5 не ушли. В ноде вы там можете очень широко развернуться.
...
Рейтинг: 0 / 0
13.01.2019, 19:26
    #39759045
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
а вот и тесты. во сколько раз nodejs медленнее делфи при последовательном выполненнии задач, во столько же раз быстрее при параллельном...

https://docs.google.com/spreadsheets/d/1YEFv_O_-QiMHbHgBUNwe7yJuyFPui54OUXzXLyjQywQ/edit?usp=sharing
...
Рейтинг: 0 / 0
13.01.2019, 19:40
    #39759047
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22,

Оно, конечно же, еще как именно там внутри у вас организовано. Но что то я, однако, сомневаюсь про отставание Delphi в параллельном. Ибо я его и на C++ с кодом, в принципе один-в-один никак не догоню.
...
Рейтинг: 0 / 0
13.01.2019, 19:43
    #39759048
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Vlad F,

он в дельфи без пулов делал. Поэтому не удивительно
...
Рейтинг: 0 / 0
13.01.2019, 19:47
    #39759050
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Нить на делфи выглядит так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
type
  TDBThread = class(TThread)
  public
    tr: TIBTransaction;
    SL: TStringList;

    constructor Create;
    destructor Destroy; override;

    procedure Execute; override;
  end;

constructor TDBThread.Create;
begin
  inherited Create(True);
  SL := TSTRingList.Create;
end;

destructor TDBThread.Destroy;
begin
  SL.Free;
  inherited;
end;

procedure TDBThread.Execute;
var
  q: TIBSQL;
  J: Integer;
begin
  q := TIBSQL.Create(nil);
  try
    q.Transaction := Tr;
    q.SQL.Text := 'SELECT FIRST 1 * FROM GD_CONTACT';
    q.ExecQuery;
    if not q.EOF then
    begin
      SL.Add(q.FieldByName('name').AsString);
    end;
    q.Close;
  finally
    q.Free;
  end;
end;



код теста так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
procedure TfrmGedeminMain.TBItem32Click(Sender: TObject);
var
  db: TIBDatabase;
  Tr: TIBTransaction;
  I, T, J: Integer;
  OL: TObjectList;
  Thread: TDBThread;
begin
  db := TIBDatabase.Create(nil);
  Tr := TIBTransaction.Create(nil);
  OL := TObjectList.Create(True);
  try
    db.LoginPrompt := False;
    db.SQLDialect := 3;
    db.Params.Clear;
    db.Params.Add('user_name=SYSDBA');
    db.Params.Add('password=***');
    db.DatabaseName := '*****';
    db.Connected := True;

    Tr.DefaultDatabase := db;
    Tr.StartTransaction;

    for I := 1 to cnt do
    begin
      Thread := TDBThread.Create;
      Thread.tr := tr;
      OL.Add(Thread);
    end;

    T := GetTickCount;

    for I := 0 to cnt - 1 do
    begin
      (OL.Items[I] as TDBThread).Resume;
    end;

    for I := 0 to cnt - 1 do
    begin
      (OL.Items[I] as TDBThread).WaitFor;
    end;

    MessageBox(0,
      PChar(IntToStr(Round(cnt / (GetTickCount - T) * 1000)) + ' req/sec'),
      'Внимание',
      MB_OK or MB_ICONINFORMATION or MB_TASKMODAL);

    Tr.Commit;
  finally
    OL.Free;
    Tr.Free;
    db.Free;
  end;
end;



код теста на nodejs:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
const  { Factory } = require("gdmn-db");
const { performance } = require('perf_hooks');

async function test() {
  const connection = Factory.FBDriver.newConnection();
  await connection.connect({
    server: {
      host: "***",
      port: 3053
    },
    username: "SYSDBA",
    password: "***",
    path: "***"
  });

  const arr = [];
  const res = [];
  const cnt = 750;
  const transaction = await connection.startTransaction();
  const startTime = performance.now();

  for (let i = 0; i < cnt; i++) {
    arr.push(
      async () => {
        const q = await connection.executeQuery(transaction, `SELECT FIRST 1 * FROM GD_CONTACT`);
        if (await q.next()) {
          res.push(q.getString("NAME"));
        }
        return q.close();
      }
    )
  }

  await Promise.all(arr.map( f => f() ));

  const endTime = performance.now();
  await transaction.commit();
  console.log(res);
  console.log(`${Math.round(cnt / (endTime - startTime) * 1000)} req/sec`);
  console.log(process.memoryUsage());

  await connection.disconnect();
}

test();
...
Рейтинг: 0 / 0
13.01.2019, 19:56
    #39759053
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
честно говоря, в драйвере для нода настоящий ад с преобразованием типов из буфера фб. и оно очень затратное. это хорошо видно на тесте. там где много (записей * полей) сразу огромное отставание в последовательном тесте или умеренное преимущество в параллельном. но, как только уменьшается количество и мы работаем с конкретной записью/полем так сразу разрыв начинает увеличиваться.

и для справедливости, надо сказать что класс в nodejs для работы с набором данных скорее похож на TDataSet в делфи. а я для теста использую в делфи TIBSQL, который ЗНАЧИТЕЛЬНО быстрее чем TDataSet так как держит внутри себя просто буфер, переданный из Firebird и преобразовывает данные только в момент обращения.

Т.е. в тесте, где мы открываем запрос, затем бежим 1000 записей, затем считываем поле NAME. Код nodejs выполнит где-то 95 000 преобразований из буфера Firebird в родные типы Java Script, а код на Delphi только одно -- кода будет считываться поле name.

Посмотрю, может заменю TIBSQL на TIBDATASET чтобы сравнимые вещи сравнивать.
...
Рейтинг: 0 / 0
13.01.2019, 20:24
    #39759061
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22,

Ваш тест в части Delphi полная туфта. Ожидал большего профессионализма от специалистов Гедымина,
но теперь начинаю догадываться о причинах поиска других платформ. На Delphi же в настоящее время в
многопоточном режиме одним из самых узких мест являются обращения к менеджеру памяти, коих я в вашем
.Execute(), не считая .ExecQuery, насчитал целых пять штук. В то время как в альтернативном варианте все
аналоги вынесены за пределы цикла. Вы не находите, что по меньшей мере не солидно транслировать
сделанные на основани всех этих "недочетов"выводы на все союзное государство?))
...
Рейтинг: 0 / 0
13.01.2019, 20:33
    #39759065
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
ох, чем мне нравятся русскоязычные форумы это их доброжелательностью ))

приведен простой код на делфи без мега оптимизаций и ухищрений и такой же простой код на node.

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

в чем проблема? у делфи менеджер памяти не такой как надо? зато у node 888 слоев преобразования
данных между c++ и javascript. да еще и параллельно работающий gc.
...
Рейтинг: 0 / 0
13.01.2019, 21:07
    #39759072
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Vlad FНа Delphi же в настоящее время в
многопоточном режиме одним из самых узких мест являются обращения к менеджеру памяти

Брось, не такое уж он и узкое место. И прокололись они в этом тесте совсем не на нём. 750
настоящих потоков против 750 запросов к пулу из четырёх потоков - вот где собака порылась.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.01.2019, 21:17
    #39759073
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22,

Возможно, мы здесь и не ласковы, но, видимо, в иноязычных тоже ничему путному не научили.
И я не про мегаоптимизации, а всего лишь, про грамотное построение многопоточного конвеера.
Проблемы в менеджере памяти Delphi в том, что он блокировочный. Помести в паскалевский .Execute
цикл на десяток миллионов ExecQuery, а результат в том же цикле цикле забирай через .Fields[nn].
Аналогичный цикл, не сочти за труд, соорудить внутри, а не снаружи потоковой функции
альтернативного языка и только тогда можно будет о чем то аргументированно говорить.
Иначе к озвученным результатам нет и не может быть никакого доверия, ибо они получены
в совершенно неравных условиях.
...
Рейтинг: 0 / 0
13.01.2019, 21:20
    #39759075
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Dimitry Sibiryakov,

А вот посмотрим, если смелый экспериментатор внемлется к советам.))
...
Рейтинг: 0 / 0
13.01.2019, 22:10
    #39759085
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Задача стояла проверить на коротком примере ШТАТНЫЕ средства организации параллельных вычислений ноды и дельфи. Она выполнена.

То что предлагаете Вы звучит так: взять на ноде простенький пример на 20 строчек и сравнивать его со специально написанной оптимизированной программой, по сути эмулирующей основную идею нода. у меня не было задачи сравнивать производительность нода с производительностью нода, написанного на делфи.

и вот почему: повторение архитектуры ноды повторит не только ее плюсы, но и ее минусы. Чего мне как раз таки и не надо.

Потоки в Гедымине конечно же не выглядят так просто. Вот базовый класс потока, управляемого сообщениями:

https://github.com/GoldenSoftwareLtd/gedemin/blob/b78c077d4d6018d6cded76894d8e6365b82deddf/Gedemin/Component/gdMessagedThread.pas

а вот один из классов нити, на базе TgdMessagedThread:

https://github.com/GoldenSoftwareLtd/gedemin/blob/b78c077d4d6018d6cded76894d8e6365b82deddf/Gedemin/Component/gd_WebClientControl_unit.pas#L59
...
Рейтинг: 0 / 0
13.01.2019, 22:13
    #39759087
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22Задача стояла проверить на коротком примере ШТАТНЫЕ средства...
А смысл?
...
Рейтинг: 0 / 0
13.01.2019, 22:28
    #39759091
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22,

действительно какой смысл? так можно и на C++ без оптимизаций написать, а потом сделать вывод что потоки С++ не оптимальны
...
Рейтинг: 0 / 0
13.01.2019, 22:35
    #39759096
Сергей Фролов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Предлагаю забить на веб, который модно-молодежный.
И сделать так, чтобы Гедымин просто работал через Интернет. 99.9% хотелок пользователей это решение закроет. Те, инвалиды, которые хотят браузер, пусть в ВК и ОК работают.
...
Рейтинг: 0 / 0
13.01.2019, 22:50
    #39759098
sysdba22
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
Сергей Фролов,

это именно то, что я думаю о текущей ситуации... но есть такая неприятная вещь, как тендеры. где в последнее время поголовно начали включать требования в виде "веб интерфейса", "работы под операционной системой с открытым исходным кодом" и т.п.
...
Рейтинг: 0 / 0
13.01.2019, 23:03
    #39759102
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22Задача стояла проверить на коротком примере ШТАТНЫЕ средства организации параллельных
вычислений ноды и дельфи. Она выполнена.

Прэлестно, но у меня для тебя есть плохая новость: в пределах одного коннекта Firebird
параллельной работы быть не может, вызовы API жёстко сериализуются.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.01.2019, 00:56
    #39759131
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с node-firebird-drivers
sysdba22Пока вроде подправили у себя, ошибки пока нет.....
В чем проблема то была ?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблемы с node-firebird-drivers / 25 сообщений из 77, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]