|
|
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Visual Studio 2012 + Firebird 2.5.2 SuperServer Win7 x64 + Firebird .NET provider. Подключаюсь к базе удаленно через TCP/IP. Так как в некоторых таблицах имеются по несколько BLOB-ов а я кеширию в программе несколько таблиц выборка идет очень медленно (60-180 секунд). Таблицы не очень большие (500-1000 строк). Вопрос в том что-бы как-то ускорить SELECT * FROM SomeTable. Имеется-ли возможность всю таблицу вернуть как JSON? Есть-ли стандартные функции или подключаемые функции? С отчаяния даже написал несколько ХП что-бы частично решить проблему. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plsql 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. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 05:59:13 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench Amanov, правильным мне в данном случае представляется написание сервера приложений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 09:20:56 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Проблема не в том чтобы написать сервер приложений. Я и так использую связку NancyFX + Topshelf чтобы устройства на андроиде могли пользоватся базой на "огнептице" :) . Дело как раз в том чтобы узнать есть ли хотя бы теоретическая возможность реализовать такой функционал в самой базе, используя или родные функции или хранимые процедуры. UDF в моем сценарии тоже исключено. Потому-что мои клиенты ничего кроме Далее->Далее не знают. Думаю закончу такой функционал полностью через месяц, потому что пока не могу из ХП слелать конвертацию [binary blob] -> Base64. А так по прикидкам остальное все работает. Тогда в чем проблема и зачем вопрос? Просто если работа уже однажды сделана, не хочется мучиться во второй раз И вся эта бодяга оперативки жрет не по детски. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 10:20:28 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Тут действительно нужен сервер, только не сервер приложений, а просто промежуточный сервер, который будет делать всю сложную работу, которую неудобно делать в ХП... Этот сервер - обычное приложение, работающее с БД. Отличие только в том, что нужно добавить в него к-нить технологию обмена с "внешним миром". Я, например, использую http и Datasnap, т.е. в сервере есть еще встроенный web-сервер и datasnap-сервер. Т.е. классическая трехзвенка. Это не так сложно, как кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 10:32:45 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Nancyfx это как раз легкий веб сервер. Topshelf это фрейморк для виндовых служб. Так-что трехзвенка в наличии :) Используется HTTP (GET/POST). Просто не всегда есть возможность эту службу установить. И чисто по человечески интересно, можно так сделать или нет. Вот было-бы прекрасно написать SELECT * FROM SomeTable RETURNING JSON (как если не ошибаюсь есть в PostgreSQL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 10:44:56 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench AmanovВот было-бы прекрасно написать нет этого, и вряд-ли будет. Не серверово это дело всякими форматами заниматься. Например, у InterBase в свое время сделали преобразование получаемой выборки в XML, но в клиентской части (gds32.dll). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 10:59:37 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench AmanovВопрос в том что-бы как-то ускорить SELECT * FROM SomeTable. Имеется-ли возможность всю таблицу вернуть как JSON?А как второе поможет первому ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 11:27:15 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
hvladА как второе поможет первому ? я так понял, что "быстрее" было бы если сервер будет сам преобразованиями заниматься, чем делать преобразования и формирование json в хранимой процедуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 12:15:24 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench AmanovUDF в моем сценарии тоже исключено. Потому-что мои клиенты ничего кроме Далее->Далее не знают.Ты программист или где? что мешает написать свой инсталлятор файрберда, который подсунет нужные либы? Тем более писать его не с нуля. Begench Amanovкак-то ускорить SELECT * FROM SomeTableтакой запрос можно ускорить только шустрым диском и достаточным объемом ОЗУ. К жейсону это вообще перпендикулярно. kdvнет этого, и вряд-ли будет. Не серверово это дело всякими форматами заниматься.В 2.1 много чего "затащили внутрь". Если найдется купец, то какие проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 12:29:01 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
kdvя так понялА я вот - ничего не понял. И сильно сомневаюсь, что ТС понимает, что делает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 13:00:49 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench AmanovWin7 x64 + Firebird .NET provider. Так как в некоторых таблицах имеются по несколько BLOB-ов а я кеширию в программе несколько таблиц выборка идет очень медленно (60-180 секунд). Это известная архитектурная проблема .NET провайдера. Используй нативные интерфейсы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 14:31:33 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Не знаю как это сделано в нативных интерфейсах но в .NET + Firebird .NET Provider выборка SELECT * FROM SomeTable работает так: 1) возвращается вся таблица (вместо BLOB-ов их ID) 2) На КАЖДЫЙ blob генерируется новый запрос... Ну вы поняли. Так что если для примера в выборке больше 200 строк и в каждой строке 2-3 блоба, можно идти пить чай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 19:42:42 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench Amanov, трейс это подтверждает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 19:45:58 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Простите забыл добавить что медленная выборка это при обращении к базе через сеть (удаленно). Если запрос к локальной базе, то никаких проблем. kdvhvladА как второе поможет первому ? я так понял, что "быстрее" было бы если сервер будет сам преобразованиями заниматься, чем делать преобразования и формирование json в хранимой процедуре. именно. Dimitry SibiryakovЭто известная архитектурная проблема .NET провайдера. Используй нативные интерфейсы. Не знаю, не знаю. FlameRobin тоже не по детски тормозит на этой выборке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 19:53:25 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench AmanovНе знаю как это сделано в нативных интерфейсах Ну так слушай тех, кто знает. Используй нативные интерфейсы и для получения содержимого блобов буфер побольше (64к вместо 300 байт) - будет тебе счастье. Может быть. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 19:54:23 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Dimitry SibiryakovНу так слушай тех, кто знает. Используй нативные интерфейсы и для получения содержимого блобов буфер побольше (64к вместо 300 байт) - будет тебе счастье. Может быть. А можно подсказать неофиту как это сделать в .NET (ссылка на доки, мануалы?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 20:00:14 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, Для этого трейс не нужен. Дока 6. If you query tables with BLOBs without actually reading BLOB data (just doing SELECT *) it is a good idea to remove them from the column list, since BLOBs require two trips to the server (one to retrieve BLOB ID and other the retrieve the data). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 20:08:00 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench Amanov, Кстати, а в блобах у тебя данные какой длины? Может проще звать CAST (BLOBFIELD as VARCHAR(xxxx)), чтобы обойти эту генерацию 100500 запросов по блоб полям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 20:08:10 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench AmanovА можно подсказать неофиту как это сделать в .NET (ссылка на доки, мануалы?) Это просто: сначала сносишь .NET, потом устанавливаешь вменяемый нативный C++ и... всё. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 20:11:52 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
DarkMasterКстати, а в блобах у тебя данные какой длины? Может проще звать CAST (BLOBFIELD as VARCHAR(xxxx)), чтобы обойти эту генерацию 100500 запросов по блоб полям? У меня вся база в UTF8, а блобы у меня произвольной длины. Так что не получится. Dimitry SibiryakovЭто просто: сначала сносишь .NET, потом устанавливаешь вменяемый нативный C++ и... всё. Проект которому 8 лет и он вполне успешен переписать на С++? Да вы юморист батенька. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 20:19:01 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
А впрочем, я неправ: CORE-3424 так и висит открытым, так что как руки ни рихтуй, два round-trip на каждый BLOB остаются и по сей день. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 20:20:33 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Так и вопрос был в том что если можно сделать RETURNING JSON эти roundtrip-ы были бы не нужны. Возвращался бы один большой BLOB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 20:27:43 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench Amanov, по первой процедуре, чудится мне, что тут тормоза отсюда Код: plaintext http://www.ibase.ru/devinfo/dbgrowth.html нет? Begench AmanovТак и вопрос был в том что если можно сделать RETURNING JSON ну нету никакого returning json. Сделать - да, можно, за деньги. А без денег оно тут кроме тебя никому не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 21:02:36 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
kdv, Сделать я и сам могу :) Хотелось узнать делал это кто ранее или нет. Просто делать однажды сделанное... лень. Спасибо за подсказку про тормоза. Просто пока не нашел сбособ не создавать блобы после каждого replace. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 21:17:43 |
|
||
|
Возможно ли возвратить выборку в формате JSON, Firebird 2.5.2 SuperServer Win7 x64
|
|||
|---|---|---|---|
|
#18+
Begench Amanov1) возвращается вся таблица (вместо BLOB-ов их ID) 2) На КАЖДЫЙ blob генерируется новый запрос... Ну вы поняли.1. Есс-но 2. Что, даже если код их не трогает - провайдер всё равно САМ их вытягивает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2014, 22:29:51 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38587861&tid=1563798]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
215ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 585ms |

| 0 / 0 |
