Сравнение скорости чтения данных в 1SQLite и DBEng32




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

42 Comments

  1. CheBurator

    …спилберг…

    Reply
  2. hogik

    (1)(Сhe Burashka)

    “…спилберг…”

    А это означает “плюс” или “минус”? ;-)))))))

    Reply
  3. CheBurator

    …непанятна…

    а выложить сами тексты тестов…?

    Reply
  4. hogik

    (3)

    “а выложить сами тексты тестов…?”

    Положил. Примерно так это выглядит.

    Reply
  5. Abadonna

    #==TABLE no 62 : Справочник хДвижение2007

    # Name |Descr |Type[A/S/U]|DBTableName|ReUsable

    Нет, чтобы мои плагином открыть, там по «человечьи» рисует 🙂

    Справочник Аналоги, SQL-таблица: SC552

    Поле |Описание |Tип |Длина |Точность

    ____________________________________________________________­____

    ROW_ID |Row ID |I |0 |0

    ID |ID object |C |9 |0

    CODE |object code |C |8 |0

    DESCR |object description |C |100 |0

    PARENTEXT |Parent in other tabl|C |9 |0

    ISMARK |Object is Marked for|L |0 |0

    VERSTAMP |Version stamp |I |0 |0

    SP553 |(P)Каталог |C |9 |0

    SP554 |(P)ИдентификаторВКат|C |40 |0

    Reply
  6. Lesovik

    кинулся тестировать:)

    Reply
  7. hogik

    (5)

    “Нет, чтобы мои плагином открыть”

    Это дело вкуса. 😉

    Неужели больше замечаний нет? 🙁

    Reply
  8. Abadonna

    >Неужели больше замечаний нет?

    Замечание только одно: dbf — это что??? :)))

    Разве ж можно живую 1С и dbf-ом? :)))

    У меня даже на отладке и то скуль стоит, я такой матершины как dbf и помнить не желаю

    Reply
  9. hogik

    (8)

    “Разве ж можно живую 1С и dbf-ом?”

    И я об том же. 😉

    В “DBEng32+Advantage” не CDX/DBF, а ADI/ADT.

    Reply
  10. JohnyDeath

    (8) Многие и на ДБФ нормально работают!

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

    Reply
  11. Abadonna

    (10) Вот тут ты ошибаешься! На ЗП экономят, но, к примеру, если бы зашел в нашей конторе только в туалет и посмотрел, что там — и москвичи могут позавидовать… А как тебе три канала оптики по 2 мегабита с безлимитным инетом? А телефон у КАЖДОГО сотрудника, причем беспроводной? И т.д. и т.п. :)))

    Reply
  12. JohnyDeath

    (11) с сортиром у нас тоже всё нормально ;))))))) (может эта такая мода у провинциальных директоров?)

    Но если б ты посмотрел на наш «сервер» ты б ах-ел! Я уж не говорю о том, как они относятся к тому, чтобы купить КАКОЙ-ТО там SQL, а потом к нему ещё и лицензии покупать (тоже непонятно какие и зачем). Вот такая вот хреновина у нас за МКАДом 😉

    Reply
  13. Abadonna

    (12) >на наш «сервер»

    Гы, у нас серверов штук 8 или 10…. Кстати, классную МФУ на днях взяли, включает в себя кроме прочего факсимильный аппарат с лазерной печатью и даже с распознаванием, если надо. Приятный девайсик

    Reply
  14. hogik

    (12)

    “Вот такая вот хреновина у нас за МКАДом”

    И у нас…:-(((

    Reply
  15. silgis

    Тут подсчитали, чтобы перевести свою базу на SQL на 50 пользователей необходимо выложить почти 500000 (полмиллиона) рублеков(покупка SQL сервера+Windows Server+лицензии+выделенный сервер), начальство ужаснулась, и сказали тащите свою базу в 4 Гига на DBF, приходится резать.

    Reply
  16. hogik

    Добавлены замеры для DBEng32 (CodeBase 6.5).

    Reply
  17. hogik

    Изменены замеры для DBEng32 (CodeBase 6.5) в новой (5.1.2.9) версии.

    Reply
  18. kiruha

    Для чистоты эксперимента тогда уж прошу проверить замеры и для драйвера FoxPro,

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

    Драйвер брать здесь

    http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA -95A3289C5FD4&displaylang=en

    Для облегчения проверки

    Код
     ЗагрузитьВнешнююКомпоненту("1cpp.dll");
       глОлеДБ = СоздатьОбъект("OLEDBData");
       Рез=глОлеДБ.Соединение("
       |Provider=VFPOLEDB.1;
    //   |Deleted=Yes;
       |Null = Yes;
       |Exclusive = No;
       |SourceType = DBF;
       |Data Source=" + КаталогИБ() + ";
       |Mode=ReadWrite;
       |Extended Properties="""";
       |User ID="""";
       |Password="""";
       |Mask Password=False;
       |Collating Sequence=MACHINE;
       |DSN=""""");
       
        запрос = глОлеДБ.СоздатьКоманду();
       т1 = _GetPerformanceCounter();
       тз = запрос.ВыполнитьИнструкцию("
       |select
       |   sum($хДвижение.Количество) as Колич
       |from
       |   $Справочник.хДвижение2007 as хДвижение
       |where
       |   хДвижение.ID > ' 2XUFQ   ' and $хДвижение.Количество> 0
       |");
       т2 = _GetPerformanceCounter();
       Сообщить("Время выполнения запроса: " + (т2 - т1));

    Показать полностью

    Работет только в разделенном режиме.

    Во время первого обращения к таблице за ссесию происходит инициализация.

    Наибольшие преимущества в многопользовательском режиме и работа с удаленными данными (на файл сервере)

    — т.е. в фактическом "боевом" применении

    Reply
  19. kiruha

    И кстати — Тесты проверяют только одну сторону — выборку данных с условием попадающим в индекс.

    Отдельно надо проводить тесты на GROUP BY, ORDER BY, JOIN,

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

    Как показывают тесты проведенные на форуме 1Cpp в этих операциях, без которых не обходится ни один

    реальный запрос — время отличает очень существенно

    Reply
  20. hogik

    (18-19)(kiruha)

    1) “тогда уж прошу проверить”

    По результатам трех запусков получено время 174, 108, 131 секунд. Но если засекать время не с помощью функции _GetPerformanceCounter(), а по наручным часам то среднее время выполнения запроса, примерно, 30 секунд. Почему так работает данная функция – я не стал разбираться.

    2) Если запрос выполнять параллельно с обновлением таблицы из другой сессии, то запрос завершается с ошибкой “…FAILED! ICommandText::Execute(): File is in use by another user.”

    3) “И кстати — Тесты проверяют только одну сторону — выборку данных с условием попадающим в индекс.”

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

    4) “надо проводить тесты на GROUP BY, ORDER BY, JOIN,”

    Мне это не надо. Извините…

    Reply
  21. JohnyDeath

    (20) по п.2

    Ну тут всё ожидаемо: с помощью Фокса мы подключаемся к базе «из вне», в отличии от 1sqlite и вашей разработки, которые используют родной движок и родное подключение.

    Вот и получается: 1С заблокировала таблицу на запись, а мы пытаемся считать данные Фоксом — имеем «File is in use by another user.». По этой же причине фоксом не получится обращаться к таблицам в монопольном режиме.

    Reply
  22. kiruha

    (20)Извините — я думал Вы в курсе.

    Для многопользовательского режима используют патченный драйвер от Ужаса

    http://uzhast.fatal.ru/vfpoledb/ (но есть и штатный способ)

    Общий FAQ по использованию Fox в ДБФ

    http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/25#25

    Reply
  23. kiruha

    Каков объем оперативки?

    (При не навигационном доступе результат запроса размещается в оперативке,

    если ее не хватает — дополнительно приходится скидывать данные на диск (для Fox весь результат))

    Reply
  24. hogik

    (22-23)(kiruha)

    “Каков объем оперативки?”

    Мне этот вопрос не понятен в контексте проводимого тестирования. Проверять я не буду, но не думаю, что для выполнения “select sum($хДвижение.Количество) as Колич from…” требуется большой объем оперативной памяти для размещения результата.

    “При не навигационном доступе результат запроса размещается в оперативке…”

    Не всегда. ;-))) Огромная к Вам просьба. Не тратьте своё время на объяснение для меня таких вещей. Я начал заниматься CУБД в 1973 году.

    “Для многопользовательского режима используют патченный драйвер…”

    Интересно. А кроме отключения блокировки в исправленном драйвере, что еще делается для обеспечения непротиворечивости информации при кэшировании на стороне рабочей станции?

    “но есть и штатный способ”

    Где можно с этим ознакомиться?

    Reply
  25. kiruha

    (24) И не думал просвещать про оперативку.

    Вопрос был из за особенности Fox — промежуточные данные запроса размещать в курсорах,

    которые могут в зависимости от объема или размещаться в оперативке или скидываться на диск.

    (24) Для непротиворечивости выполняется команда Fox —

    SET REFRESH TO 0,-1 которая заставляет игнорировать буфер.

    Штатный способ — во время загрузки 1С в ссесии Fox «открывать» таблицы ДБФ .

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

    Вообще есть много особенностей — половина раздела прямых запросов форума 1С++ этому посвящена —

    вряд ли здесь это интересно…

    Что касается практической проверки — народ использует доступ где то с 2005 г. На моей базе — года 1.5 в боевом.

    Reply
  26. hogik

    (25)(kiruha)

    “Для непротиворечивости выполняется команда Fox”

    Я задавал другой вопрос:

    “А кроме отключения блокировки в исправленном драйвере, что еще делается для обеспечения непротиворечивости информации при кэшировании на стороне рабочей станции?”

    “вряд ли здесь это интересно…”

    Возможно. Я просто продолжаю данную тему после ваших (18-19) сообщений в контексте сравнения скорости выполнения запроса и выяснения причин такого “феномена”. Можно и не продолжать. ;-)))

    Reply
  27. kiruha

    (26) Что в драйвере исправлено — знает только автор

    http://uzhast.fatal.ru/ но по его словам он вырезал только аналог LOCK

    «Возможно. Я просто продолжаю данную тему после ваших (18-19) сообщений в контексте сравнения скорости выполнения запроса и выяснения причин такого “феномена»

    Ок, если будут вопросы по доступу через Fox — тогда на 1cpp.ru

    Феномена никакого нет — цифры вполне нормальные.

    В Fox также используют навигационный доступ — и в таких задачах навигац. выигрывает у «реляционного».

    Reply
  28. hogik

    (27)(kiruha)

    “Феномена никакого нет — цифры вполне нормальные.”

    😉 Цифры это следствие. Я то написал “…и выяснения причин такого “феномена””.

    Но, пока, мне не удаётся нормально запустить “патченный драйвер”. Несколько раз запрос успешно выполнился. Потом я стал запускать запрос с параллельным обновлением таблицы. И с какого то момента стало вылетать сообщение:

    …FAILED! ICommandText::Execute(): Undefined critical error!

    Вернулся на исходный драйвер – работает. Базу данных восстановил – не помогло… 🙁

    Reply
  29. kiruha

    (28)Весьма интересное наблюдение..

    Альтернативный способ, в глобальнике :

    Код
     Перем глОлеДБ Экспорт;
    Процедура ИнициализацияOLEDB()
       ЗагрузитьВнешнююКомпоненту("1cpp.dll");
       глОлеДБ = СоздатьОбъект("OLEDBData");
       Рез=глОлеДБ.Соединение("
       |Provider=VFPOLEDB.1;
       |Null = Yes;
       |Exclusive = No;
       |SourceType = DBF;
       |Data Source=" + КаталогИБ() + ";
       |Mode=ReadWrite;
       |Extended Properties="""";
       |User ID="""";
       |Password="""";
       |Mask Password=False;
       |Collating Sequence=MACHINE;
       |DSN=""""");
       
       //********** Настройки *********************//
       //  Так как стоит Exclusive = No скрипт  SET EXCLUSIVE OFF не нужен
       локОлеДБКоманда = глОлеДБ.СоздатьКоманду();
       локОлеДБКоманда.Выполнить("EXECSCRIPT('SET ANSI OFF')");  
       // Устанавливаем время ожидания захвата таблиц , если во время выполнения запроса кто то проводит документы
       // Очень полезная функция - аналогична времени ожидания в 1С
       локОлеДБКоманда.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')");
       // Убираем буфепизацию, чтобы данные возвращаемые запросам всегда были актуальны
       локОлеДБКоманда.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");
       
       
       //********** Открытия таблиц *********************//
           // открываем одну таблицу
       ИмяТаблицы="$Справочник.хДвижение2007";
       текстЗапроса="SELECT  RecNo() FROM "+ИмяТаблицы+" as Спр WHERE  Спр.id='1'";
       локОлеДБКоманда.Выполнить(текстЗапроса);
            // Для проверки сбросим время ожидания в 0
       локОлеДБКоманда.Выполнить("EXECSCRIPT('SET REPROCESS TO 0 SECONDS')");
       Сообщить("конец инициализации");
    КонецПроцедуры
    Процедура ПриНачалеРаботыСистемы()  Экспорт
    //.................
    ИнициализацияOLEDB();
    КонецПроцедуры
    

    Показать полностью

    Далее использовать глОлеДБ для создания запросов

    Reply
  30. hogik

    (29)(kiruha)

    “Альтернативный способ”

    Спасибо. При этом способе работает устойчиво. Ошибку, аналогичную, ошибке при использовании 1SQLite, пока, получить не удалось. Тогда у меня возникает вопрос. Невозможность использования драйвера FoxPro в монопольном режиме это основной недостаток данного средства выполнения прямых запросов к DBFной базе? Может мне имеет смысл заняться написанием очередного варианта DBEng32 для решения этой проблемы? Это ещё актуально?

    Reply
  31. kiruha

    (30) Это недостаток и актуальный. Fox не использует 1С для доступа к файлам — поэтому не представляю,

    как это можно решить — блокировка идет на уровне ОС.

    Если удалось бы решить эту проблему — это было бы здорово 🙂 Но народ считает что это невозможно (.

    Reply
  32. kiruha

    Также должен заметить, что более перспективно использование не OLEDB , а напрямую библиотек Fox

    — это позволяет использовать дополнительные возможности библиотек Fox (например отладка, использование

    команд без создания хранимых процедур, реализация сервера) — но это тоже пока мечты.

    Reply
  33. hogik

    (31-32)(kiruha)

    “поэтому не представляю, как это можно решить”

    Я пока не вижу проблем сделать это. Пожалуй, начну делать…

    “Если удалось бы решить эту проблему — это было бы здорово”

    Мне казалось, что DBFная версия – уже не очень актуальна.

    “более перспективно использование не OLEDB , а напрямую библиотек Fox”

    Не совсем понимаю. Я использую FoxPro 6.0 из 1С. А в 9-ой версии с этим проблемы?

    “реализация сервера”

    Совсем не понимаю. Можно поподробней?

    Reply
  34. noprogrammer

    33 (hogik)

    >> Я пока не вижу проблем сделать это. Пожалуй, начну делать…

    Даже за саму попытку это сделать — уже спасибо.

    >> Мне казалось, что DBFная версия – уже не очень актуальна.

    Боюсь что тут вы сильно ошибаетесь…

    Reply
  35. kiruha

    (33) «Мне казалось, что DBFная версия – уже не очень актуальна.»

    Вообще мои замеры показывают, что Fox+1C обгоняет для средних баз и SQL и файловую 8.0.

    Причем даже непонятно в перспективе — за счет чего файловая восьмерка сможет существенно обогнать Fox.

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

    «Не совсем понимаю. Я использую FoxPro 6.0 из 1С. А в 9-ой версии с этим проблемы?»

    Проблема в эффективной передаче массивов(точнее из курсора Fox в Таблицу значений ) — пока

    вижу только либо через свойства в цикле, либо через временные файлы ДБФ.

    В документации к Fox же написано что возможно из сред С++ напрямую получать массивы из Fox (видимо по адресу в памяти)

    Хотелось бы того же в 1С

    Ну и выходная типизация к типам 1С — как это сделано для OLEDB или SQLLite.

    «<реализация сервера>

    Совсем не понимаю. Можно поподробней?»

    Fox позволяет достаточно просто делать сервера.

    Элементарный пример (для тестов) http://www.1cpp.ru/forum/YaBB.pl?num=1216110955/6#6

    И ниже в ветке описание. DCOM , но видимо лучше COM+

    Reply
  36. hogik

    (34)(kiruha)

    “Даже за саму попытку это сделать -”

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

    (35)(kiruha)

    “Fox позволяет достаточно просто делать сервера.”

    Это и все что написано вокруг этой фразы мне известно и понятно. Думаю, мне не понятно – а зачем “через” такие способы делается “нечто”. Я когда читаю вот такие фразы “…передаче массивов(точнее из курсора…” у меня крыша едет. Типа, причем тут одно к другому? Суть задач в чем? Не в смысле “напрямую получать массивы из Fox”, а в смысле 1С+FoxPro в целом?

    Reply
  37. hogik

    +(36)

    Сделал возможность выполнения прямых запросов в монопольном режиме.

    http://infostart.ru/profile/2905/projects/

    Reply
  38. kiruha

    (36) «Думаю, мне не понятно – а зачем “через” такие способы делается “нечто”»

    База хранится на файл-сервере.

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

    При использовании OLEDB Fox тащит часть содержимого таблиц DBF и CDX на клиента, если попали в индекс.

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

    Бывают варианты, когда нужно всего несколько строк.

    Например это условие по реквизиту спр. без признака «отбор».

    В таких случаях выгоднее выполнить запрос на файл сервере.

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

    Остается проблема передачи результата запроса клиенту — пользователю 1С.

    Текущие варианты (через строки, через временные файлы) недостаточно эффективны и

    могут свести на нет преимущества использования сервера.

    Прошу прощения если слишком подробно )

    Reply
  39. hogik

    (38)(kiruha)

    “Прошу прощения если слишком подробно”

    Это Вы меня извините, что отнимаю Ваше время своими вопросами. Но задам еще вопросы.

    1) Почему не используете нормальный сервер БД?

    2) В FoxPro9 снято ограничение на размер таблицы в 1(2) гигабайта.

    3) С помощью ОлеДБКоманда.Выполнить(«EXECSCRIPT(‘…’)») можно выполнять навигационные команды?

    Reply
  40. kiruha

    (39)

    п1. Пока ДБФ почти полностью устраивает пользователей.

    Время запросов до 3 сек (файлы до 50Мб пока), средниее время и того меньше.

    Также из за этого нет причин по которым могу обосновать затраты на сервер.

    п2 Вроде ограничение в 2Гб не менялось

    п3 Можно. Но вызов EXECSCRIPT фактически требует каждый раз новой компиляции, которая занимет существенное

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

    Reply
  41. hogik

    (40)(kiruha)

    “файлы до 50Мб пока”

    😉 Иногда количественные характеристики лучше проясняют вопрос (тему), чем качественные. По этой теме у меня больше нет вопросов. Мы, то, напоролись на ограничение в 1 гигабайт на первом году эксплуатации, ещё в 2001 году. И ход моих мыслей стал совсем другой. 😉 Закрываем эту тему.

    Reply
  42. nickkey

    Как показывают тесты и практика народа проведенные на форуме 1Cpp с этими операциями, без которых не обходится ни один реальный запрос — время отличается очень и очень существенно так что лишено не лишено смысла решать вам а вообще хороший пост заставляет хорошенько подумать 🙂

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *