Pull to refresh

Comments 57

Код ручной загрузки доставляет. :) Во первых вокруг цикла по DataSet источника надо делать DisableControls/EnableControls, потому что это отключает целую кучу внутренних событий, которые для копирования не нужны. Во вторых, если в TJvMemoryData нет вычислимых полей, то стоит установить AutoCalcFields в False. В третьих, дёргать FieldByName внутри цикла — преступление против производительности. Необходимо задать локальные переменные типов TIntegerField, TFolatField и TStringField, инициировать их FieldByName до цикла для обоих DataSet'ов, а внутри уже использовать их.

Потому что 4 секунды на 100к строк — это не оч. :)

P.S. Ну и всегда остаётся путь хака. Вломиться во внутренности DataSet в памяти и воссоздать его структуру вручную. Покопался в загашнике и нашёл старый класс для копирования данных из TADODataset в TJvMemoryData. По идее, если не задавать DEFINE ADODIRECT он должен элементарно переделываться на любой входной DataSet. Правда я не уверен, заработает ли он в современной Delphi, но было бы забавно увидеть его результаты в табличке с обновлённым сравнением. :)
DisableControls/EnableControls — это конечно нужно выставлять, но в моем примере никаких дополнительных обработчиков событий на DataSet'ы не повешено.
Так же есть удобный метод AppendRecord, позволяющий добавить сразу строку, а не вставлять поштучно по ячейке.
Надо вспоминать, но там по моему всё равно внутренности проворачиваются, даже если ничего не навешано.
Спасибо за статью, но как же 'стандартный' TClientDataSet?
TClientDataSet отсутствует в бесплатной версии Delphi 10.2 Tokyo Starter
Но вроде и те компоненты что вы сравниваете — не все бесплатные, зачем ограничиваться бесплатной версией Delphi и отказываться от стандартного TClientDataSet?
Кроме того можно было бы добавить к сравнению и Sqlite с режимом :memory:
Ну и насчет сравнения скорости загрузки — когда то эксперементально выяснил что много времени тратится на само чтение с HDD, так что чтение данных предварительно сжатых zstd с последующим расжатием в памяти выходит быстрее чем просто загрузка несжатых.
А почему в обзоре отсутствует бесплатный SQLMemTable (http://www.aidaim.com)?
Посмотрел этот DataSet
1. Метод LoadFromDataSet отсутствует
2. Ручная загрузка данных около 6,8 сек
3. Метода для сортировки данных нет

Судя по названию, все-таки этот DataSet предназначен для подключения к базе данных
> Судя по названию, все-таки этот DataSet предназначен для подключения к базе данных

По сути, это набор компонент, обеспечивающих создание приложений с использованием базы данных в памяти (in-memory) с поддержкой SQL.

SQLMemTable состоит из нескольких компонент:
1. TSQLMemTable
2. TSQLMemQuery
3. TSQLMemBatchMove
и TSQLMemDatabase
Доступ к данным в SQLMemTable осуществляется с использованием SQL-запросов.
По производительности спорить не буду.

У kbmMemTable тоже есть возможность сортировки по нескольким полям с ASC/DESC. Пример есть в EhLibKbmMT.pas.

Благодарю, посмотрю. TRxMemoryData тоже умеет сортировать по нескольким полям с ASC/DESC
UFO just landed and posted this here

А почему нет?


  1. Мегатонны готового кода. Выбрасывать и жалко и не имеет смысла — оно же работает (1-й принцип программиста).
  2. Привычный интерфейс. Я пытался себя поломать несколько раз на другие системы — бросил. Короткие клавиши Дельфи уже в подкорке сидят.
  3. Мультиплатформенность. Изучать Eclipse, Jav-у и прочее есть свмысл для молодых вперед-прущих. В силу возраста пересматриваешь взгляды на программирование и выбираешь малозатратные системы. А найти систем у которая пишет на Win, Mac-OS и Android — как-то таких мало.
  4. Скорость разработки. Тут если рука набита на системе — смысла нет ее менять.

Спорить по поводу достоинств тех или иных систем смысла не вижу. Если эта работает, стоит вменяемо, дает даже некоторые преимущества перед другими системами — ну нафиг от нее отказываться? В угоду Си или Джаве? Не вижу смысла.


P.S. Я в свои системы параллельно ввожу Питон и Пых. Что-то на серверных обработках, что-то прям локально (Питон в Дельфю встраивается). Сам Object Pascal сильно доработан, много новых вещей добавлено и т.д. и т.п.

UFO just landed and posted this here
«Привычный интерфейс»

чуть ли не главного требуемого в профессии навыка (быстрой обучаемости)


Как ваш комментарий связал IDE и обучаемость?

Уж что, а что качественных IDE — чуть ли не меньше 10 штук на весь мир (семейство IDEA — по суди за 1 шт. с вариациями) и ситуация сохраняется годами, каждый месяц не выходят принципиально новых.

У нас с Вами обучаемость в разных областях лежит. Тратить время на изучение того что мне не даст прибавку во времени исполнения задания я лично смысла не вижу.


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


Пусть молодые учат — у них времени полно на это. Мне хватает того что я знаю и домашних дел.


P.S. А некоторым молодым которые учат все что под руку попадется я еще и фору дам в скорости разработки ПО (и в юзабельности). Так что — есть ли смысл для меня лично? Я не вижу. Работает — не трожь.

UFO just landed and posted this here

Учить чтобы учить? Пус ть рвет — я ж не против. Только проблема почему-то есть в любом случае — называется нехватка качественных программистов. Про себя не говорю совершенно — но вижу ТАКИЕ решения — от которых в шоке!


Вы все меряете только "современностью" софта. А у пользователей спрашивали что им нравится? Про консерватизм слышали? А большинство пользователей консерваторы. Особенно бабушки. Вы что — им будете втулять что ДотНет круче Дельфи? Да плевать они хотели на крутость! Им надо чтобы работало.


Про кризис молчу… Сейчас оборудование покупают "крутышки" типа приближенных. Мелкий бизнес давно на режим экономии перешел.


Я ж не против нового. Но в меру.

UFO just landed and posted this here

Ха. Вам везет. А вы в российские реалии окунитесь. С дерьмовыми компьютерами и дерьмовым Интернетом. Какой веб нафиг? Вы о чем?

Ха. Вам везет. А вы в российские реалии окунитесь. С дерьмовыми компьютерами и дерьмовым Интернетом. Какой веб нафиг? Вы о чем?


Сижу прямо сейчас в российской глубинке с 4G модемом.
Компьютер i7-8Г.
Не вижу проблемы.
Фронт веба уже тоже можно на Delphi выполнить (UniGUI), если что.

И да, вдогонку. Я замечаю что большинство нынешних писателей ПО часто не в курсе оптимизации. Это издержки образования к сожалению. Часто прослеживавется мысль — улучшат компы и прога данные схавает. А новые технологии за тебя решают что и как… И часто даже базы не оптимизированы для запросов.


Так что по поводу форы и порвет — бабушка надвое сказала :-) Смотря какой товарисч будет

UFO just landed and posted this here

Мы в разных мирах живем. Я бы с удовольствием попал в Ваш. Но увы — российские реалии другие. И из-за нефтяной иглы, и из-за разваленного образования… Увы и ах :-(


P.S. Я прекрасно в курсе всех технологий если что :-) Вопрос в необходимости применять эти знания в российской действительности в глубинке — малоактуален. Тем более в данный момент.

UFO just landed and posted this here
Все технологии важны, все технологии нужны
Например в США до сих пор на хорошем счету программисты COBOL
UFO just landed and posted this here
Просто как тузик грелку, у вас ведь там пыхычь на сервере.


Почему?
На Пыхе живет себе Мордокнига…
UFO just landed and posted this here
С тех пор, как появилась HHVM, пыху уже два раза переписали, и теперь она даже шустрее HHVM стала.
В 2028 году тоже будет Delphi. От него никуда не деться. Языки программирования приходят и уходят, а Delphi остается
UFO just landed and posted this here
20 лет уж хоронят. И еще лет 20 будут.
UFO just landed and posted this here
UFO just landed and posted this here
C# это еще то приключение, когда надо несколько сторонних компонент прицепить, а они все в разных версиях .NET. И даже когда в исходниках, не сразу поймешь где еще сцеплены и на что завязаны, где то манифесты кривые. А сколько глюков случается в самой Visual Studio. Причем часто настолько непонятные, что даже в msdn-е советуют переустановить. Согласен еще возможно опыта маловато, и не умею готовить, но когда на профильных форумах ищешь решение возникшей проблемы, приводишь кусок кода, и оказывается, что у кого-то их нет в приведенном тексте, а у кого-то совсем другая ошибка и совсем в другом месте, то явно что то не то.
UFO just landed and posted this here
Безоговорочным лидером оказался DataSet TkbmMemTable, но и все другие DataSet'ы показали хорошие результаты. Но воспользоваться TkbmMemTable можно только с Delphi XE2.

У меня в старых проектах на Delphi 7 использовался.
Новые версии не поддерживают D7, но
As subscriber, access to older versions supporting D5 to D2007 and FPC is available.
Какой версией TkbmMemTable можно пользоваться в Delphi 7?
У меня в проекте валяется kbmMemTable v. 5.52
Из данных, полученных в статье, можно сделать вывод, что разницей в быстродействии между датасетами в подавляющем большинстве случаев можно пренебречь.
Нельзя таким пренебрегать. Машина, на которой происходило сравнение, достаточно мощная и жесткий диск SSD
Не понимаю зачем грузить сотни тысяч строк? Все фильтрации, условия, выборки должен делать сервер. А то пока вы их выберете, даже за 3 сек, они запросто уже на сервере изменятся. И прощая один из столпов баз данных — целостность. Если пользователь хочет видеть даже 10000 строк, явно он что то не понимает, и потом будет делать агрегацию, фильтрацию где нить в экселе. Так ему надо объяснить что можно это сделать самим SQL сервером, и он получит уже готовые данные, в нужном объеме 50-100-200 строк.
Да разные кейсы бывают. Я, например, своими глазами видел, как люди анализируют таможенную базу, выборка из примерно 70000 строк. И самое главное, что по их задачам я не увидел никаких более эффективных вариантов, кроме как вытянуть их все на клиента, и дать там уже их группировать/фильтровать локально.
Кроме того, не всегда клиент — живой человек. Это может быть и робот, который там какую-то статистику считает. Ему тоже в общем случае можно все данные сразу тянуть.
Все фильтрации, условия, выборки должен делать сервер. А то пока вы их выберете, даже за 3 сек, они запросто уже на сервере изменятся.


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

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

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

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

А зачем? все равно с товаром нужно текущие наличие, а оно меняется постоянно. Для разных клиентов могут быть разные цены, т.е. фактически на клиента нужно все справочники передавать? Да и товары добавляются, редактируются. А потом и получаем то что творится в интернет-магазинах, товар числится, а при заказе получаем что либо кончился, либо вообще не существует.
Прошу извинить, но у Вас осталось мировозрение работы с базой, как с большим экселем.
Тогда тем более сравнение ниочем. Синтетический тест на тестовой аппаратной конфигурации показал несколько попугаев. Что он покажет на другой конфигурации, без SSD, с удаленным сервером, и VPN-подключением?
Простите за вопрос, но почему не на habrahabr?
Я совсем не против, чтобы здесь, но на хабре, в первую очередь, больше просмотров и больше аудитория
я только за, чтобы два ресурса слились обратно, но для этого нужно и остальных уговорить :)
Мою первую статью модераторы почему-то перенесли с habrahabr на geektimes. Тут и остался.
А просмотров здесь тоже очень много.
Мою первую статью модераторы почему-то перенесли с habrahabr на geektimes. Тут и остался.
А просмотров здесь тоже очень много.


С первой все понятно. Такова ее тематика.
А эту надо на Хабр.

Мьі тут чето потестили. Результат не понрсвился, потому похезали. Читайте — наслаждайтеси.

А в целом — спасибо за перечень конкурентов, такие перечни я до сих пор теряюсь где и как искать…
Sign up to leave a comment.

Articles

Change theme settings