Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий

Модерирует : ShIvADeSt

ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение раздела http://forum.ru-board.com/topic.cgi?forum=33&topic=6607&start=0  
Ссылки приветствуются.

См. также:

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 07:33 20-06-2007 | Исправлено: XPerformer, 14:41 24-10-2013
Prot_XT

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ClientDataset стоит рассматривать хотя бы потому, что он входит в стандартную поставку Delphi, ну и сравнить насколько же он медленнее других конкурентов.
 
Добавлено:
Теперь давайте определимся с таблицей и полями... а также какие данные загонять и их количество.
 
Добавлено:
на счет SQLite не понял... это же БД... а мы рассматриваем компоненты доступа. О чем речь вообще? Что имеешь в виду? Если компоненты FireDAC, то я там смотрел MemoryDataset - с виду навороченный какой-то, но это тоже самое, как я понял, что и AbyDAC.
 
Добавлено:
AnyDAC

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 13:30 02-06-2014
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT
SQLite - да, это БД. Локальная БД, умеющая кроме всего прочего работать и in-memory
подробнее тут http://www.sqlite.org/inmemorydb.html
а компонентов доступа к ней полно, как бесплатных, так и платных.  
если уж брать Absolute Db - то почему б и sqlite не взять для сравнения

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 14:13 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
если уж брать Absolute Db - то почему б и sqlite не взять для сравнения

в состав Absolute Database входит отдельный компонент MemTable. Его и можно тестировать.
А что тестировать для случая SQLite?
ведь это не компонент, укажите конкретную реализацию доступа для тестирования

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 14:28 02-06-2014
dred2k



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPerformer

Цитата:
Есть ли смысл рассматривать ClientDataset?  
нет ни индексов, ни блобов

 
Индексы есть, причем работает с ними все шустро. Помню, давно еще юзал постоянно таблицу в памяти из RX (TMemDataSet, кажется). Все было ничего, пока объем данных обрабатывался малый. На нескольких метрах TClientDataSet с индексами в разы (!) быстрее работал, чем таблица от RX.
Блобы наверное тоже есть, ftMemo думаю точно поддерживается.

Всего записей: 403 | Зарегистр. 15-02-2006 | Отправлено: 15:59 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dred2k
сори, попутал
вот статья http://belenkovsv.ru/page/komponenty-dlja-dostupa-k-bd-kto-bystree-chast-6
с блобами он очень медленно работает, наверно, поэтому для себя решил ClientDataset не использовать с блобами
 
Добавлено:
Давайте план составим, что включать в тест. Для первого приближения:
1) Заполнение БД - читать из одного и тог же csv? генерировать рендомно?
определение средней скорости добавления записи
2) последовательное чтение
3) поиск без ключа
4) поиск по ключу
5) фильтрация

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 16:05 02-06-2014
ValidolX

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет
вижу азарт и желание сделать соревнование!
 
все верно, надо программу и план тестирования
Read/Write/Search/Filter/Blobs
Обеьм - 1 млн записей например
1 таблица, надо проработать ее структуру
надо договориться как делать замер времени (лучше програмно с результатом на форму)
 
вот пример как люди делали похожее -  
http://www.delphiplus.org/articles/tests/bde_alternative/index.html

Всего записей: 1708 | Зарегистр. 22-07-2001 | Отправлено: 16:31 02-06-2014
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPerformer
 
SQLite тестировать? Ну - это ж встраиваемый движок, вам то какая разница - компонентом он на дельфях сделан, или линкован через ту или иную обертку. Имхо, что компонент, что линкованный движок не суть разница, отличия - технические и несущественные.  
 
Тестировать можно любые компоненты, с ним работающие. Я уже писал про FireDAC, так как он в поставку модерновых дельфей входит (он же AnyDAC для ранних версий). Можно еще DISQLite - тоже вполне себе (в нем dll внутри компонента была).  
 
План тестирования
 
Логично при тестировании рассмотреть несколько юз-кейзов для in-memory database:
 
* когда используем как кэш результатов запроса с локальной сортировкой и выводом данных в грид: выгрузка в in memory database большого набора данных (например, query result) с последующем наложением индексов и запросами для pagination (а-ля "first 20 skip 60");
 
* кэш данных с картинками: выгрузка blob в in memory database  как вариация первого тест кейза; тестим скорость загрузки кучи блобов в in memory table, навешивание индексов, выборку по ключам (сортировку набора данных) и скорость чтения пересортированных данных (блобов в частности);
 
* также частым юз кейзом является локальный поиск по подстроке - типа, FTS если оно в движке есть (выводим все записи, в которых в определенных полях есть подстрока); можно сопоставить фичи FTS - Unicode, Case Insensetive, Soundex (другие вариации нечеткого поиска, типа стэмов слов) и тп;  
 
upd
 
Если использовать для тестирования SQLite (особенно при вставке набора записей), то его настройки желательно тюнинговать. Во первых, использовать синхронную сборку, во вторых, сделать правильные настройки. Тест должен включать вставку пачками с коммитом через определенное количество записей (хотя бы без без автокоммита после вставки каждой записи), а то за счет поддержки транзакций он сольет другим участникам. Сабж оч подробно описан на stackoverflow по keywordам "sqlite performance insert".
 
Кстати, логично сделать таблицу сравнения фич - есть ли, например, та же поддержка транзакций. Для in memory хз нужно ли, но как фича..  

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 17:18 02-06-2014 | Исправлено: deks, 17:28 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
deks

Цитата:
SQLite тестировать? Ну - это ж встраиваемый движок, вам то какая разница - компонентом он на дельфях сделан, или линкован через ту или иную обертку. Имхо, что компонент, что линкованный движок не суть разница, отличия - технические и несущественные.  

сильно сомневаюсь, что несущественные. Что с успехом демонстрируют всякие обертки и обертки над обертками. Реализация реализации рознь. Давайте все-таки сосредоточимся на компонентах (а не базах данных), которые позволяют работать с таблицами в памяти. В конце концов, я предложил MemTable из библиотеки Absolute, я могу к нему и тест написать.  
Кто предложил sqlite, тот и выберет компоненты для тестирования.

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 17:24 02-06-2014
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPerformer
 
Кстати, логично будет автору идеи тестирования поднять проект на Github, там можно и дополнить его. Хороший опыт будет) Компоненты желательно не афишировать откуда и каждый их достает сам)))

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 17:31 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да я думаю, никто себе не будет ставить весь этот зоопарк.  
Надо написать тест для одного движка. А потом желающие адаптируют тест под выбранные движки и опубликуют результаты.
Я могу взять на себя Memtable из Absolute и EhLib

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 17:40 02-06-2014
Prot_XT

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
вот пример как люди делали похожее -  
http://www.delphiplus.org/articles/tests/bde_alternative/index.html

 
Ну а что? Давайте это и возьмем за образец, а? И структуру и процедуры по чтению записей...
Хотя бы просто без картинок. Хотя можно было бы BLOB-ы текстовые попробовать еще.

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 17:44 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть готовый csv больше миллиона записей. Выложить куда-нибудь как базу для тестирования?

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 17:50 02-06-2014
deks



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPerformer
 
Кстате, да, хорошее и верное предложение! Ждем-с какого нибудь зачинателя и реквестирую таки GitHub. Там можно будет разобрать проект себе и сделать порт под свой "любимый" двиг. Чуть позднее посмотрю по загрузке - может возьмусь за SQLite (мне бы было интересно его сделать под DISLite и FireDAC и сравнить).

Всего записей: 857 | Зарегистр. 09-10-2003 | Отправлено: 17:51 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в общем, пока на яндекс-диск. Там реальные данные, но только числовые. 280 мб.  
Думаю, надо взять еще один тестовый полигон - поменьше, в реальным задачах более типичны количества записей по 100-200 тыс записей и меньше. Полагаю, разница будет и в скорости, и возможно, кое-кто из компонент не справится с большим файлом, но справится с маленьким.
http://yadi.sk/d/l4EzF5TXS2DLw

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 18:00 02-06-2014 | Исправлено: XPerformer, 18:01 02-06-2014
Prot_XT

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Господа, а не будет ли влиять на тесты чтение из базы данных? Я что-то сомневаюсь...
Может для чистоты эксперимента заполнять программно? Как описано в статье выше:
 
procedure AddRecords1(TBL: TDataSet);
const
  MAX_RECORDS = 100000;
var
  I: Integer;
begin
  MainForm.PC.Start;
  TBL.Active := True;
  try
   for I := 1 to MAX_RECORDS do
   begin
    TBL.Append;
     TBL.FieldByName('STR1').AsString := Format('%d', [I]);
     TBL.FieldByName('STR2').AsString := Format('%d', [MAX_RECORDS - I]);
     TBL.FieldByName('STR3').AsString := Format('%d', [I]);
     TBL.FieldByName('STR4').AsString := Format('%d', [MAX_RECORDS - I]);
     TBL.FieldByName('FLOAT1').AsFloat := I + I / 3;
     TBL.FieldByName('FLOAT2').AsFloat := MAX_RECORDS - I / 3;
    TBL.Post;
   end;
  finally
   TBL.Active := False;
   MainForm.PC.Show;
  end;
end;

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 18:13 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT
такой подход дает очень несбалансированный индекс. Алгоритмы индексации в этом случае работают плохо.  В реальных задачах это редко встречается, то есть пример искусственный. Скорость он померяет, но в реальной жизни будет существенно другая скорость.
А чтение с диска конечно повлияет. равно как и частота планки памяти в конкретном компе, и размер ее, и частота процессора...

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 18:19 02-06-2014 | Исправлено: XPerformer, 18:20 02-06-2014
Prot_XT

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
в общем, пока на яндекс-диск. Там реальные данные, но только числовые. 280 мб.  
Думаю, надо взять еще один тестовый полигон - поменьше, в реальным задачах более типичны количества записей по 100-200 тыс записей и меньше. Полагаю, разница будет и в скорости, и возможно, кое-кто из компонент не справится с большим файлом, но справится с маленьким.
http://yadi.sk/d/l4EzF5TXS2DLw

 
Не понял... там одно поле что-ли всего?

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 18:38 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Prot_XT
три поля

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 18:39 02-06-2014
Prot_XT

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Или три? Разделитель запятая?

Всего записей: 163 | Зарегистр. 04-04-2003 | Отправлено: 18:39 02-06-2014
XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я собственно, не настаиваю именно на этом файле. Это какие-то курсы валют. Просто данные должны быть хорошо перемешаны.

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 18:41 02-06-2014
   

Страницы: 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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий
ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru