Comments 57
Потому что 4 секунды на 100к строк — это не оч. :)
P.S. Ну и всегда остаётся путь хака. Вломиться во внутренности DataSet в памяти и воссоздать его структуру вручную. Покопался в загашнике и нашёл старый класс для копирования данных из TADODataset в TJvMemoryData. По идее, если не задавать DEFINE ADODIRECT он должен элементарно переделываться на любой входной DataSet. Правда я не уверен, заработает ли он в современной Delphi, но было бы забавно увидеть его результаты в табличке с обновлённым сравнением. :)
Так же есть удобный метод AppendRecord, позволяющий добавить сразу строку, а не вставлять поштучно по ячейке.
Кроме того можно было бы добавить к сравнению и Sqlite с режимом :memory:
Ну и насчет сравнения скорости загрузки — когда то эксперементально выяснил что много времени тратится на само чтение с HDD, так что чтение данных предварительно сжатых zstd с последующим расжатием в памяти выходит быстрее чем просто загрузка несжатых.
1. Метод LoadFromDataSet отсутствует
2. Ручная загрузка данных около 6,8 сек
3. Метода для сортировки данных нет
Судя по названию, все-таки этот DataSet предназначен для подключения к базе данных
По сути, это набор компонент, обеспечивающих создание приложений с использованием базы данных в памяти (in-memory) с поддержкой SQL.
SQLMemTable состоит из нескольких компонент:
1. TSQLMemTable
2. TSQLMemQuery
3. TSQLMemBatchMove
и TSQLMemDatabase
Доступ к данным в SQLMemTable осуществляется с использованием SQL-запросов.
По производительности спорить не буду.
У kbmMemTable тоже есть возможность сортировки по нескольким полям с ASC/DESC. Пример есть в EhLibKbmMT.pas.
А почему нет?
- Мегатонны готового кода. Выбрасывать и жалко и не имеет смысла — оно же работает (1-й принцип программиста).
- Привычный интерфейс. Я пытался себя поломать несколько раз на другие системы — бросил. Короткие клавиши Дельфи уже в подкорке сидят.
- Мультиплатформенность. Изучать Eclipse, Jav-у и прочее есть свмысл для молодых вперед-прущих. В силу возраста пересматриваешь взгляды на программирование и выбираешь малозатратные системы. А найти систем у которая пишет на Win, Mac-OS и Android — как-то таких мало.
- Скорость разработки. Тут если рука набита на системе — смысла нет ее менять.
Спорить по поводу достоинств тех или иных систем смысла не вижу. Если эта работает, стоит вменяемо, дает даже некоторые преимущества перед другими системами — ну нафиг от нее отказываться? В угоду Си или Джаве? Не вижу смысла.
P.S. Я в свои системы параллельно ввожу Питон и Пых. Что-то на серверных обработках, что-то прям локально (Питон в Дельфю встраивается). Сам Object Pascal сильно доработан, много новых вещей добавлено и т.д. и т.п.
«Привычный интерфейс»
…
чуть ли не главного требуемого в профессии навыка (быстрой обучаемости)
Как ваш комментарий связал IDE и обучаемость?
Уж что, а что качественных IDE — чуть ли не меньше 10 штук на весь мир (семейство IDEA — по суди за 1 шт. с вариациями) и ситуация сохраняется годами, каждый месяц не выходят принципиально новых.
У нас с Вами обучаемость в разных областях лежит. Тратить время на изучение того что мне не даст прибавку во времени исполнения задания я лично смысла не вижу.
Ни в коем случае не отказываюсь от новых вещей. Но заниматься самобичеванием по вопросу "ой, вышло что-то новое, дай-ка я это выучу" — я точно не буду. Других забот полно.
Пусть молодые учат — у них времени полно на это. Мне хватает того что я знаю и домашних дел.
P.S. А некоторым молодым которые учат все что под руку попадется я еще и фору дам в скорости разработки ПО (и в юзабельности). Так что — есть ли смысл для меня лично? Я не вижу. Работает — не трожь.
Учить чтобы учить? Пус ть рвет — я ж не против. Только проблема почему-то есть в любом случае — называется нехватка качественных программистов. Про себя не говорю совершенно — но вижу ТАКИЕ решения — от которых в шоке!
Вы все меряете только "современностью" софта. А у пользователей спрашивали что им нравится? Про консерватизм слышали? А большинство пользователей консерваторы. Особенно бабушки. Вы что — им будете втулять что ДотНет круче Дельфи? Да плевать они хотели на крутость! Им надо чтобы работало.
Про кризис молчу… Сейчас оборудование покупают "крутышки" типа приближенных. Мелкий бизнес давно на режим экономии перешел.
Я ж не против нового. Но в меру.
Ха. Вам везет. А вы в российские реалии окунитесь. С дерьмовыми компьютерами и дерьмовым Интернетом. Какой веб нафиг? Вы о чем?
И да, вдогонку. Я замечаю что большинство нынешних писателей ПО часто не в курсе оптимизации. Это издержки образования к сожалению. Часто прослеживавется мысль — улучшат компы и прога данные схавает. А новые технологии за тебя решают что и как… И часто даже базы не оптимизированы для запросов.
Так что по поводу форы и порвет — бабушка надвое сказала :-) Смотря какой товарисч будет
Мы в разных мирах живем. Я бы с удовольствием попал в Ваш. Но увы — российские реалии другие. И из-за нефтяной иглы, и из-за разваленного образования… Увы и ах :-(
P.S. Я прекрасно в курсе всех технологий если что :-) Вопрос в необходимости применять эти знания в российской действительности в глубинке — малоактуален. Тем более в данный момент.
Просто как тузик грелку, у вас ведь там пыхычь на сервере.
Почему?
На Пыхе живет себе Мордокнига…
Безоговорочным лидером оказался DataSet TkbmMemTable, но и все другие DataSet'ы показали хорошие результаты. Но воспользоваться TkbmMemTable можно только с Delphi XE2.
У меня в старых проектах на Delphi 7 использовался.
Новые версии не поддерживают D7, но
As subscriber, access to older versions supporting D5 to D2007 and FPC is available.
Кроме того, не всегда клиент — живой человек. Это может быть и робот, который там какую-то статистику считает. Ему тоже в общем случае можно все данные сразу тянуть.
Все фильтрации, условия, выборки должен делать сервер. А то пока вы их выберете, даже за 3 сек, они запросто уже на сервере изменятся.
Вы ничего не слышали про оптимистичные блокировки?
В ряде случаев на клиенте выгодно делать много операций. Клиенты нынче жирные. Иногда имеет смысл и сервер разгрузить.
Ну какая, скажите мне, проблема раз в сутки в начале рабочего дня загрузить на компьютер продавца список товара?
Сами операции продажи если нужен единый учет остатков — да, на сервер нужно отправлять оперативно.
А скажем для розницы — где товары физически просто берутся в полки, учет остатков оперативный не нужен, вполне можно подбивать итоги в конце дня. Можно загрузить на клиента в начале дня, выгрузить с клиента на сервер — в конце дня. Обновлять в течение дня только цены это не большая нагрузка на канал связи.
Ну какая, скажите мне, проблема раз в сутки в начале рабочего дня загрузить на компьютер продавца список товара?
А зачем? все равно с товаром нужно текущие наличие, а оно меняется постоянно. Для разных клиентов могут быть разные цены, т.е. фактически на клиента нужно все справочники передавать? Да и товары добавляются, редактируются. А потом и получаем то что творится в интернет-магазинах, товар числится, а при заказе получаем что либо кончился, либо вообще не существует.
Прошу извинить, но у Вас осталось мировозрение работы с базой, как с большим экселем.
Я совсем не против, чтобы здесь, но на хабре, в первую очередь, больше просмотров и больше аудитория
я только за, чтобы два ресурса слились обратно, но для этого нужно и остальных уговорить :)
А просмотров здесь тоже очень много.
Мьі тут чето потестили. Результат не понрсвился, потому похезали. Читайте — наслаждайтеси.
Delphi: самый быстрый DataSet (TJvMemoryData, TMemTableEh, TdxMemData, TkbmMemTable)