<?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='\
Автор, а если оракл использовать на винде, то смысла вообще нет, так как появляется больше минусов чем плюсов и проблема в разработке.
Основной и главный вывод! 🙂
Огромное спасибо за статью, очень основательный подход, такую сразу в закладки)
Не соглашусь только в 2х вещах:
1. DBA на MsSQL и на ~200х пользователях еще ни разу не понадобился, вообще. Даже мысли не возникало никогда о его необходимости
2. Обзывать постгрес проектом для энтузиастов — крайне забавно.
(1) zavedeev, Нуу… на Windows с Oracle конечно не всё так ужасно как может показаться на первый взгляд, это всё-таки не 1С на Linux :). Просто куча мелких деталей говорит что Oracle на Windows это не Enterprise уровень…. Но SE One с 50+ пользователями вполне, если плюс в том, к прмеру, что Oracle уже куплен 🙂
(3) h-rx,
Да все привыкли обходиться без DBA, но ИМХО это не совсем правильно. Разработчик должен заниматься разработкой… Очень часто MS SQL бывает «запущен» так что у грамотных администраторов «Волосы встают дыбом», не говоря уже о том что пользователи страдают… А если говорить о SLA то всем становится грустно… 90% 1С решений с 200+ пользователями не используют даже Fail Over кластер… в лёгкую MS SQL ставят на виртуальные машины… даже модель резервного копирования Simple можно встретить… Не, DBA нужен, даже если «можно обойтись» без него.
(2) DoctorRoza, Ну всё-таки в контексте… в контексте… Хотя бы надо оценивать потребность в кластеризации…
(6) подскажите, пожалуйста, какой примерно может быть выигрыш в шекелях от использования СУБД Oracle, исходя только из расходов на системного администратора, относительно администратора, знающего MSSQL? 🙂
(7) DoctorRoza, Вопрос как я понимаю риторический. Проиграем раза в 2-3 минимум :). Но подскажите пожалуйста как вы будете использовать СУБД MS SQL если у вас в одной базе работает 3-4 тысячи пользователей, при этом это не бухи, а операционка? Купите мэйнфрейм и поставите на него один MS SQL? При этом MS SQL-овский FailOver всё равно скинет вам всех пользователей при переключении…
(8)
да вообще то работают
оракл «валиться» на временных таблицах, называть его «ентерпрайз решением под 1С» язык не поворачивается
(9) Gilev.Vyacheslav, Ну это очень «смелые» клиенты… которые вам доверяют :)… Когда вы будете вести дискуссии с не 1С специалистами, использование не кластерной СУБД им аргументировать будет очень и очень сложно….
ну у Oracle есть «особенности» которые «немного не так как хотелось бы» сделали в 1С, и временные таблицы тут не самое страшное… Конечно для «Enterprise» придётся в решении очень и очень много перерабатывать…. я думаю вы же со мной согласитесь что временные таблицы это не панацея на все случаи жизни а вложенные запросы это не абсолютное зло…
(10) не соглашусь, часть временных таблиц генерирует платформа не зависимо от желания разработчика. По этой логике надо не запускать 1С тогда
смелые не смелые, а работает
(11) Gilev.Vyacheslav, Генерирует конечно… но не в каждом запросе… это уже «не убийственно» ИМХО.
1С то как раз не проблема убедить запускать: формально 1С — отказоустойчивый кластер HA с балансировкой нагрузки… А вот с MS SQL уже хуже… MS SQL кластер весьма «условно», притом направление развития судя по всему не в эту сторону… вместо кластеризации появляется «в дань моде» in-memory…
(12) не можете запустить на скуле масштабируемое решение — обращайтесь к нам, все организуем
(13) Gilev.Vyacheslav, Сделаете кластер на MS SQL? О_о может вам тогда Microsoft-у предложить свои услуги :). Там где MS SQL и более 1000 пользователей там РИБ и никуда от него не деться… На Oracle пока просто не решили… может ещё годик другой и 1С с ним будет «душа в душу работать»… но пока это тоже не Enterprise…
(14) может удивлю, но с Microsoft мы плотно работаемhttp://www.gilev.ru/results/
а ты где был на инфостарте, когда люди про 5000 на скуле в «Деловых линиях» рассказывали, спал? )))
(15) Gilev.Vyacheslav, Нее… ну это «самые смелые» 🙂 там много «интересного порассказали» :).
так когда в MS SQL появится кластер? 🙂 Люди из софтпоинта уже даже какой-то HandMade на эту тему сделали…
(0)
>>ORACLE – это продукт, который изначально разрабатывался под LINUX
Дальше можно не читать. Скорее всего, автор больших проектов с использованием СУБД Oracle в глаза не видел.
(17) zarucheisky,
. не то чтобы автор не видел, а их просто нет. Это выясняли специально — искали специалистов. :))))). Ну по крайней мере на момент написания статьи (2 года уже как) не было… наш должен был быть первым такого масштаба…
Нуу… я тоже не фанат *nix. Но это абсолютно не значит что если речь идёт о решениях на этой системе все они заведомо плохи… В эту систему тоже вложены N-е суммы денег теми же Oracle и IBM…
(18) Искали специалистов применительно к 1С?
Да, ораколоиды на такое добро не падки, совершенно правильно считая 1С для себя гемммороем, им вполне хватает обSAPпленных компаний.
Про Linux. Просто не пишите в следующих раз подобное, если не хотите стать посмешищем на ресурсах типа sql.ru/LOR (linux.org.ru).
Касательно убогости GUI-ёв для *NIX решений: для администрирования в *NIX GUI практически не используется т.к. всё админится через командную строку.
(18) Вклад самой oracle в разработку/поддержку linux минимален.
Просто наследие покупки Sun.
Что Oralce, что MS для 1С на текущий момент одинаково, ни у того ни другого сервера нет явного преимущества друг перед другом. По одной простой причине 1С сервер не интегрируется глубоко в архитектуру серверов.
(21) «Интегрируется» применено неверно, ИМХО, скорее, 1С не использует все возможности движков и диалектов СУБД.
(22) zarucheisky, Смысл от этого не меняется. Что касается статьи в которой автор указал что якобы «ОС для Oracle вообще бесплатно», я не соглашусь с этим, пару раз сталкивался с развернутым Oracle на linux, полный комплект linux + Oracle стоил хороших денег, а linux была специально скомпилирована под определенную версию Oracle, без всяких графических оболочек и прочей не нужной фигни которую обычно ставят.
(23) Кому как. По мне, так интеграция и использование СУБД совершенно разные понятия.
(24) zarucheisky, Вы можете написать универсальный ANSI SQL сервис доступа к серверу СУБД, и ваш сервис сможет работать с любым сервером СУБД — это использование, но если вы начнете использовать специфику определенного сервера, то уже с другими серверами не сможете работать, вот это уже интеграция.
(19) zarucheisky,
оу оу… посмешишем стать можно если совсем ничего в них не понимать. Тут речь идёт скорее о «религиозных войнах». Это дааа… это возможно. Ну с позиции «лагеря 1С-ников» вполне оправдано. «true» линуксоиды конечно «забрызгают слюной» 🙂
(19) zarucheisky,
. Ну мы вообще-то в принципе про 1С говорим… :). Сам по себе Oracle тут вряд ли кого интересует…
(23) alex_sh2008, Бесплатно только сыр в мышеловке :). На конференции я говорил что конечно условно бесплатно… просто в статью это как то не попало….
(28) Да я смотрю много чего не попало в статью, и стоимости СУБД и редакции СУБД которые вы сравнивали, и среду в которой использовались эти СУБД для сравнения, нагрузки под который рассчитывалась конфигурация. Использование Oracle с 1С было выбрано надеюсь не 50 пользователей, а как минимум 5000?
(29) alex_sh2008, Почему, стоимость попала, и редакция (SE ONE). Но вообще цели сравнения с MS SQL как бы не озвучивалось…. Зачем описывать среду??? Проект рассчитывался на 25-50 тыс. пользователей примерно… тестировалось на 500, ну команда разработки и проектирования работала это и правда 50-70 пользователей…
(30) На 50-70 пользователях, вы вообще ничего не заметите, у эти серверов в редакциях Enterprise разность в производительности начинает ощущаться в разных режимах работы это порядка 10тыс одновременных соединений.
(30)
Эта редакция, маловероятно что вытянет у вас 25 тыс пользователей, с на тягом может 5000 и то не уверен.
(25) если вы начнете использовать специфику определенного сервера, то это, опять таки, не интеграция.
(31) alex_sh2008, Спасибо, вы открыли мне глаза :)))) А то я уж думал :)))
(32) alex_sh2008, Хоть бы статью перед комментом прочитали… хотя бы первый слайд…. там просто для сравнения цены MS SQL SE и Oracle SE One :))) А дальше я пишу что оно не особо нужно… Но на 50 пользователей, естественно, только его использовали.
(35) Ясно.
По поводу тестирования 1С на Оракле я тут когда-то писалhttp://infostart.ru/public/118362/ — как все было грустно, так и осталось.
Статья зачетная.
(9)
Называть саму 1С энтерпрайз решением язык не поворачивается 🙂 Не в том смысле что 1С нельзя заставить работать с достаточно большими базами или достаточно большим количеством пользователей, но есть множество неприятных особенностей, которые все старания 1С сводят на нет. Реальный недавний пример, программное лицензирование — админ расширил размер диска на виртуалке, слетела лицензия и вся розничная сеть остановилась. Особенно порадовал факт что когда 3 пина закончились то резервный пин уже не дают, только взамен текущего 🙂
(5)
Я уже устал бороться с админами которые рассказывают что виртуалки им удобны, а замедление незначительное 🙁
(39) А вы статью напишите с аргументацией что и как. И потом можно будет всем ссылку давать в качестве объяснения.
Ох не на простой вопрос это вы замахнулись… Я недавно еле книгу осилил по виртуализации скуля… А вы говорите статью. Там не всё просто, не всё однозначно, и более того не стоит на месте. Есть разные гипервизоры с разными глюками…
Автор лукавит и сам себе противоречит:
То есть он рассматривает бесплатный линукс как ОС для серьезных проектов и не рассматривает бесплатный постгрес …
Лично я из статьи вывод сделал такой: с учетом того, что и для Postgre, и для ORACLE требуется DBA, но Postgre при этом бесплатный а лицензии ORACLE стоят примерно столько же, сколько и MS и, кроме того, поддержка оракла со 2 года (=возможность обновляться) стоит ощутимых денег (про которые автор умолчал), и с учетом того, что 1с всё равно не использует фишек оракла нужно выбирать между MS SQL и Postgre.
(42) а с учетом того, что наши админы ms sql «крякают» — то и выбирать не надо 🙂
(39)А чем вам не нравится виртуализация MS SQL, при правильном архитектурном решении ни какого падения производительности нет?
(44)
А никто не думает, что потерей производительности при виртуализации СУБД можно пренебречь в сравнении с проблемами производительности самого кластера 1С?
Вот Fresh на Postgres работает и нормально поговаривают.