|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
С Acsess, DAO и ADO я в принципе знаком и программы на эту тему писал. Тем не менее в программе кот. должна работать на произвольном компьютере я от этого отказался, а использую тестовуху, причем даже FileSystemObject не использую на всякий случай. Т.е. Есть текстовой файл (БД) 1 строка=1 запись A=aaa;B=bbb; C=ccc.... Есть прога#1 с Listview, кот. суть эту БД отображает в режиме реального времени. Есть прога#2 кот. следит за входящими данными (таймер скажем на 1сек). Входящие данные суть короткие текстовухи (эту часть поменять нельзя, ибо генерируются C++ прогой, а в нее я лезть не буду). Текстовуха по сути содержит информацию вида: процесс с B=xxx: параметры такие-то Получив такой файл прога 2# выполняет 2 задачи: 1) лезет в БД и a)правит строчку с B=xxx если есть, либо добавляет строчку с B=xxx если нет 2) генерит текстовуху для прога#1 c информацией о добавить/поправить запись в Listview(дабы не читать всю БД целиком всякий раз) Прога#1 с Listview по таймеру ловит файлы от прога#2 и добавляет/обновляет отдельные строки. При загрузке читает БД, если уж хочется считать БД целиком, то есть кнопка Refresh. Иногда она тоже может внести изменения в БД, но этим не злоупотребляется. -------------------------- Вся эта кухня работает достаточно хорошо и надежно, несмотря на столь грубую реализацию, в духе "оч.плохих программистов", как тут же съязвили бы на местном форуме C++. Во всяком случае если процессов 2-10, то все отлично. Но сделал тут тест на 30-50 активных процессов...ну и скажем строчек в БД не 2 десятка а поболе, скажем тыщонка-другая. Нет, все нормально,катастрофы не происходит... но ощущение что программы "не успевают", т.е. много файлов в очереди, отображение процессов далеко не в real-time ну и т.п....CPU Usage поджираться понятно начинает... Ну и плюс конечно, тяжело что-то новое добавлять в эту конструкцию. Т.е. думаю, то ли оптимизировать существующие алгоритмы, можно конечно, но до определенного предела думаю. Или все-таки менять "ядро". От входящих текстовух я конечно не избавлюсь, но у меня есть явно слабые звенья: 1) работа с текстовухой-БД на предмет "перерыть ее". 2) обмен большим количеством потоковых текстовушек между 2-мя exe-приложениями VB. 3) ListView черпает в процессе работы информацию не синхронно из самой БД а по "левому" каналу.(синхронность, но принудительно) 4) Не злоупотребляется, но фактически допустим одновременный доступ к "БД" (текстовуха!) в режиме записи со стороны более одного приложения. Т.е. куда оптимизироваться? Если в сторону БД, то какой? Есть ли какой-то стандартный тип БД, не требующий доустановки на чистой системе Windows (стандартный компонент)? Я видел малюсенькие проги, кот. устанавливают 100MB-SQL сервера, кот. потом не запускаются и не знаешь чего делать. Я знаю про mdb, что оно так просто не работает. Надо либо Access, и vb sp5/6 устанавливать, какие точно компоненты не знаю. Т.е. мне такого счастья не надо. Именно поэтому и остановился на простой текстовухе. Но что-то все-таки надо предпринять...не дело так жить. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 03:55 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Дмитрий77> Я знаю про mdb, что оно так просто не работает. Как раз работает. И есть в чистой системе и обновление небольшое. Время поиска при обновлении данных будет для текстовухи весьма существенное - надо или БД или хранить в памяти. Еще между программами №1 и №2 лучше уйти от обмена файлами. Или OLE/DDE или просто через сообщения Windows (если удастся поместить минимум данных). Или можно напрямую писать данные в окно программы №1. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 12:06 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
SiemarglДмитрий77> Я знаю про mdb, что оно так просто не работает. Как раз работает. И есть в чистой системе и обновление небольшое. В произвольной XP/2003/Vista/2008/7 x86/x64 ? Обновление какое и как доустанавливать (инсталлятором понятно)? Предполагается формат MsAccess 2000, так? VB6 его понимает начиная с SP5-6, помнится там mdac какой-то доустанавливается, а Access сам не нужен. SiemarglВремя поиска при обновлении данных будет для текстовухи весьма существенное Мелкие глюки потихоньку убираю. Вроде все достаточно резво. Обнаружил некоторые крупные, которые и с БД бы стреляли точно также. Например прога #2 иногда отправляет e-mail (+файлик к нему), на выбор через CDO или консольную утилиту с ожиданием окончания процесса(ShellAndContinue прекрасно грузит процессор), но в любом случае это идет в "общем стэке", то бишь пока mail не отправится, следующая строчка Listview не обновится, а если этих mail-ов 50 - стоим минуту-другую?...Это хуже всех текстовух, задания слать mail-ы надо в отдельный процесс/БД просто скидывать. Недоработка-С. Siemarglили хранить в памяти. В памяти это понятно. Но у меня 2 проги с этим делом работают. Раз, питание слетело, и что-то с памятью моей стало. Не уверен... Siemarglили просто через сообщения Windows (если удастся поместить минимум данных). Данные обмена в одну строчку, хотя и длинную. Причем основной поток именно в направлении Прога#2->Прога#1, если не считать случаев, когда пользователь сам правит БД из Проги #1. Прога#2 не имеет интерфейса - задача обрабатывать данные. SendMessage имеете ввиду? Пример обмена можно? SiemarglИли можно напрямую писать данные в окно программы №1. Ну, в смысле SendMessage (Listview.hwnd, и.т.д.) Не пойдет. Там SubItems много. И они в основном управляются через VB-модель. То что пишется через API в subitems, через VB потом не читается. Долго разгребать придется. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 12:51 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Дмитрий77, o mdac речь и идет. http://en.wikipedia.org/wiki/Microsoft_Data_Access_Components Jet engine - это доступ к mdb Про SendMessage кажется я зря упомянул. Не помню, есть ли в VB возможность отлавливать произвольные сообщения в приложении (организовать свой оконный цикл). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 13:35 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Можно. Вот науглил пример google (visual basic sendmessage other program) http://www.codeproject.com/KB/vb/Send_string_by_message.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 13:46 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
SiemarglJet engine - это доступ к mdb Это все понятно. И понятно как-чего программировать, и как это работает, когда это уже стоит. Минимально чего конкретно и как инсталлятором надо поставить чтобы это было? Конкретно. SiemarglПро SendMessage кажется я зря упомянул. Не помню, есть ли в VB возможность отлавливать произвольные сообщения в приложении (организовать свой оконный цикл). Можно. Вот науглил пример google Ну наверно чего-нибудь сабклассить...чтоб отловить. Но Ваш пример про vb.net Нужен простой для vb6, без примера это черт ногу сломит с такими вещами...Я с ходу не нашел. Если б еще от C++ можно было посылать - отлавливать в vb6, было бы вообще замечательно, но это в данном контексте хотя б с двумя vb разобраться...и надо ли. Прога#2 у меня может работать как сервис (под System), ее работа в отличии от прога #1 (всегда под user )обязательна поэтому они разделены по понятным причинам. А файлы они как бы для всех общие. Поэтому даже не уверен что эти сообщения всегда будут "посылаться", даже если разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 14:27 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Дмитрий77, не вижу проблем перевести vb.net на vb. В английской вике, что я дал ссылку - все подробно и есть ссылка на Jet Engine. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2010, 19:04 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
SiemarglДмитрий77, не вижу проблем перевести vb.net на vb..Там написано In VB6, we can easily use the SendMessage function to send a wm_datacopy message, because we can define lparam as Any..Откуда следует что перевод сложного vb.net->vb6 не имеет смысла. Но именно конкретного примера с упомянутым wm_datacopy message (для vb6), я найти то и не могу. SiemarglВ английской вике, что я дал ссылку - все подробно и есть ссылка на Jet Engine.Да согласен, якобы проблем вообще нет Windows XP 4.0 SP5+ Windows Server 2003 4.0 SP6+ Windows Vista 4.0 SP8+ Windows Server 2008 4.0 SP8+ Windows 7 4.0 SP8+ Но: сделайте поиск в Google на тему: "jet engine win 7 64 bit" и проблема сразу нарисуется, не так ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 02:53 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Дмитрий77Но: сделайте поиск в Google на тему: "jet engine win 7 64 bit" и проблема сразу нарисуется, не так ли?Вот как раз в данном случае: "Меньше искать, больше делать". В действительности там нету никаких проблем. Просто люди пугаются смеси 32-х и 64-х битных систем. А по сути первоначального вопроса: то что тебе нужно называется "встраиваемые СУБД" (embedded). Их на рынке ныне много, выбирай на вкус. Акцесс тоже можно считать в какой-то мере встраиваемой, но оно слишком уж тормозное и неудобное для реальной работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 05:27 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
White OwlВот как раз в данном случае: "Меньше искать, больше делать". В действительности там нету никаких проблем. Просто люди пугаются смеси 32-х и 64-х битных систем. Я не сказал что я пугаюсь. Я подобные проблемы с x64 решать умею, сделайте поиск по моим топикам, но "больше делать" надо, согласен. Только я еще не начинал делать, и не уверен что именно это тот путь, тем более сами Access не рекомендуете, хотя да, использовал в прошлом. Программа обычно начинала со "сжатия и восстановления базы", чтоб не тормозило. И строчки с "решетками" из-за сбоев тоже помню. White OwlА по сути первоначального вопроса: то что тебе нужно называется "встраиваемые СУБД" (embedded). Их на рынке ныне много, выбирай на вкус. Что значит на рынке? Покупать желания нету. Сделал беглый поиск. Есть бесплатные. Если правильно понял, кидаем в папку с прогой dll-другую, и пользуемся без установки и излишних проблем. Какую Embedded DBMS можете порекомендовать для удобной работы именно с VB? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 06:49 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > Какую Embedded DBMS можете порекомендовать для удобной работы именно с VB? Какую лучше знаешь, для себя, я взял-бы FireBird. По моему был какой-то вариант и у MSSQL. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 10:52 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Игорь ГорбоносКакую лучше знаешь, для себя, я взял-бы FireBird.Кроме Access ничего не знаю. Firebird Direct Access for Visual Basic -Это? на перспективу если, изучаться надо... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 11:09 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > Игорь Горбонос > Какую лучше знаешь, для себя, я взял-бы FireBird. > Кроме Access ничего не знаю. Это не беда, я как раз Access до сих пор не знаю :( > Firebird Direct Access for Visual Basic -Это? Это вижу в первый раз, но используемая "внутрях" IBPP говорит мне что как минимум посмотреть нужно, потому, что на сишных проектах я использовал эту IBPP :) Я вообще имел в виду Firebird ODBC/JDBC Drivers > на перспективу если, изучаться надо... Другое дело, что FireBird - версионная СУБД, в отличии от привычного акцеса или MSSQL, которые блокировочники, поэтому при разработке нужно учитывать эту особенность. http://www.sql.ru/forum/actualthread.aspx?tid=807391]Вот товарищ хочет начать изучение, поччитай, посмотри. что и как Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 11:28 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Игорь Горбонос, Для данной задачи firebird слишком много и сложно. Придется разрабатывать в клиент-сервер, потом менять не emdebbed. Если ТС почетче обрисует хотя бы пределы, до которых он хочет расширять базу, можно будет посмотреть. А так - ту нагрузку что потянут на тестовых файлах, на .mdb будет летать ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 12:05 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
> Автор: Siemargl > Игорь Горбонос, > > Для данной задачи firebird слишком много и сложно. Согласен, зато будет задел переходить на полноценный сервер :) > Придется разрабатывать в клиент-сервер, потом менять не emdebbed. Ну все когда-то начинали :) К тому-же у ТС было много изысканий на предмет нормальной работы клиентского приложения на различных ОС. Теперь, когда красота наведена, почему-бы не посвятить время изучению чего-то нового. > Если ТС почетче обрисует хотя бы пределы, до которых он хочет расширять базу, можно будет посмотреть. > А так - ту нагрузку что потянут на тестовых файлах, на .mdb будет летать ) +1 P.S. Но из-за того, что я не знаю акцеса, я бы сразу начинал делать на FB :) P.S.S. Все что написанно выше, это ИМХО. Вот такой я - северный олень Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 12:13 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Игорь Горбонос> P.S. Но из-за того, что я не знаю акцеса, я бы сразу начинал делать на FB :) Не верю. VB6 и Access - близнецы-братья. На переход у тебя уйдет полдня ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 12:17 |
|
Реализовать БД безобидным способом.
|
|||
---|---|---|---|
#18+
Э...даже не знаю. Какие-то FireBird изучать неохота. Но сделал эксперимент: вникнул в свои старые коды: взял первую попавшуюся mdb, накатал вот это в чистом проекте: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
C:\Program Files\Common Files\system\ado\msado25.tlb Microsoft ActiveX Data Objects 2.5 Library Потом правда закомментировал как приведено и сомнительную tlb из ссылок убрал, и сделал exe-шник. Потом проверил пару exe-mdb на нескольких системах. Win XP 32-бит (где делал) Server 2003 32-бит Server 2008 64-бит Win 7 32-бит Win 7 64-бит Везде сработало. Не ожидал даж такого эффекта. Хотя...не знаю, на Win 7 64-бит Office 2000 включая Access установлен зачем-то был, нечистый какой-то эксперимент. Надо чистую ставить... Не знаю пока стоит ли возиться... раньше следующего года вряд ли буду заниматься переделками. Вообще конечно CreateObject кажется очень хороший метод, пусть система сама думает че там создавать в рамках своей испорченности, че нибудь да создаст, пусть сама разбирается со своей многобитностью и версиями. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2010, 14:15 |
|
|
start [/forum/topic.php?fid=60&fpage=114&tid=2159222]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 143ms |
0 / 0 |