Отиди на
Форум "Наука"

Въпроси и отговори свързани с работата на Interbase и Firebird SQL в среда на Linux


Recommended Posts

  • Глобален Модератор

Като се заговори за безплатен софтуер ... може ли да попитам нещо?

Та има ли някой идея, как се държи Firebird под управление на Linux? И коя версия на Firebird с кой диалект е най-подходящ за използуване при управление на Linux?

Благодаря Б.

П.С. Клиентът ще бъде писан на C# Framework 4.0.

Link to comment
Share on other sites

  • Потребител

Здравейте,

Веднага ви отговарям.

Предполагам, че визирате Firebird SQL?

Да си призная, имам слабост към всичко свързано с Borland, Embarcadero и естествено ... Delphi.

Но на темата:

1. При създаването на тази СУБД e залегнала идеята за Atomicity, Consistency, Isolation and Durability. Това е повече от показателно за това, какво имаме като ядро.

2. Тук има нещо, което се нарича PSQL (процедурен SQL). Исключително силен иснструмент за разработка.

3. Добавете към това и UDF (User Defined Function). Такива "външни" функции може да пишете на какъвто език пожелаете (за да няма кавги кой език за програмиране е по-добър) и ги включвате към сървъра като DLL/SO. Направо променяте сървъра според собствени си вкус.

4. Можете едновременно да обработвате OLTP и OLAP заявки. Ако не греша това се наричаше "версионна архитектура".

5. Firebird работи в средата на 32 и/или 64-разрядни версии на Windows, Linux, MacOS, HP-UX, FreeBSD, IBM Server и каквото се сетите. Най-общо всичко, изградено върху апаратни платформи като x86, x64, PowerPC, Sparc и т.н..

6. Преноса на базите данни от една към друга операционна система става ... с копиране. Просто е като 2+2.

А сега най-хубавото от хубавините:

Firebird се разпространява с IPL (InterBase Public License) и IDPL (Initial Developer’s Public License) лицензи. Безплатен дори за комерсиални приложения. :bigwink:

Найс, а? :bigwink:

Сега конкретно за Linux.

Бъдете спокойни. Пробвал съм с MDB (Multimedia DataBase). При размер на базата над 1,5 TByte (един и половина тера байта) работеше като часовник.

За разлика от ORACLE няма да имате проблеми с BLOB полетата (личен опит).

Ако работите за Русия или друга страна в ОНД е нужно да се съобразите с кодовите таблици. Специално за Linux Ви препоръчввм следния адрес:

http://www.cl.cam.ac.uk/~mgk25/unicode.html

Полезен е, особенно ако ви се налага да извършвате пренос от други СУБД във Firebird.

Не забравяйте, че символните низове в UNICODE заемат повече място, а и имат два начина за сортировка (бинарен и азбучен). Това е важно ако работите с CLOB полета.

СЕГА ЗА "ДИАЛЕКТИТЕ" ... :bigwink:

Когато клиенската част изпраща "заявка" към сървъра с данни, може да се ползват два диалекта.

Ако ползвате т.н. "Диалект 1", сървърът ще ви изпраща 32 битови целочислени стойности, ако и вътре в него те да са 64-битови. Това се прави с цел избягване на "зацикляне".

Ако ползвате "Диалект 3" ще си комуникирате със 64 битови стойности.

И в двата случая няма да имате проблем.

Важно е да разберете, че това е въпрос от страна на "клиента", а не от страна на "сървъра". На сървъра му е все тая, клиента какви ще ги дроби. Той си е умничък и се справя с всякакви ситуации. :bigwink:

Ако и други конкретни въпроси, може да ги зададете. Ще видим с какво мога да ви бъда полезен. :bigwink:

Поздравления за избора на Firebird. Пак повтарям не се притеснявайте. В Linux работи прекрасно, както и във всяка друга ОС.

С най-добри пожелания

Г.Т.Герасимов

(дърт пергишин с недостатък в характера)

P.S. Нямате проблем с версията. Тя не е определяща. Важно е как е написана заявката, а ако е външно приложение как осъществявате връзката (например при ADO има един специфичен нюанс).

Само да добавя нещо важно:

Ако ползвате "Диалект 3" в някой от използваните генератори имате целочислена променлива (тип INTEGER), всичко ще е наред, ако стойностите са в 32-битовия диапазон. Ако обаче "прескочите гранницата" ще се получи грешка (препълване). "Диалект 3" е много стриктен.

Най-важното, което трябва да знаете е, че генераторите съхраняват на сървъра всички стойности в 64-bita, без значение коя версия на Firebird ползвате. Разликата е в това, че в единия случай ви се връща директно 64 bit число, а в другия (ако сме работили както трябва) числото може да се разбие на две по 32 bit (както на времето "старши" и "младши").

За незапознатите: Генераторът е целочислен брояч (thread-safe), който се намира вътре в СУБД Firebird.

Ако питате мен обаче е по-добре да ползвате SEQUENCE (последователност). Абсолютно същото е, но проблемите ще са ви по-малко, ако започвате от нула.

Ето как се прави:

CREATE SEQUENCE NewSeq;

Само не се опитвайте да ръчкате директно в RDB$GENERATORS. На системните таблици не им допада идеята за директен достъп. Ако ще го правите ползвайте SELECT. :bigwink:

Link to comment
Share on other sites

  • Глобален Модератор

Бих искал да благодаря за отговора.

***

Веднага ви отговарям.

Предполагам, че визирате Firebird SQL?

Да си призная, имам слабост към всичко свързано с Borland, Embarcadero и естествено ... Delphi.

**

Аз също, но имам известни предпочитания към Borland C Builder

***

И така.. Продуктът ще работи в щатите, така че това важно уточнение за кодовите таблици ще го пренебрегна на този етап.

В момента работи система Клиент / Сървър - писана на Делфи с Интербейз. Трябва да се преработи и да бъде Web базирана с база Firebird SQL и Web Service осигуряващ достъп до данните.

До този момент правихме тестове Firebird диалект 3 с написани на куп процедури. Работи перфектно, но тестовете ни са провеждани само в среда на Windows XP и Windows 7. Interbase не работи с Windows 7 и това е основната причина да се търси ново решение ...

Вероятно сървърът ще работи в среда на Linux. Буквално до няколко дни трябва да взема решение каква операционна система да препоръчвам.

****

Отново искам да благодаря за отговора ... Б.

П.С. Благодаря за предложението за помощ.. Ще се нуждая от нея. След ден, два започвам писането на сервиза и кой знае с какво ще се сблъскам.

Редактирано от Б.Богданов
Link to comment
Share on other sites

  • Глобален Модератор

И веднага излезе въпрос..:)

***

В съхранена процедура на Файрбърда, може ли да се дефинира масив?:post-20645-1121105496:

***

Благодаря Б.Б.

Link to comment
Share on other sites

  • Потребител

Ако се вярва на написаното съхранените масиви не допускат процедури, но ... :bigwink:

Да видим какво може да измислим по въпроса ...

Ето два примера, които биха могли да влязат в употреба. Руснаците имат доста силни експерти в SQL.

МЕТОД I

EXECUTE BLOCK (IDS VARCHAR(32000) = ?IDS)

RETURNS (ID INTEGER)

AS

BEGIN

FOR SELECT "Id" FROM "RssFeedItems" WHERE :IDS CONTAINING '~'||"Id"||'~' INTO :ID DO

SUSPEND;

END

МЕТОД II

EXECUTE BLOCK (IDS VARCHAR(32000) = ?IDS)

RETURNS (ID INTEGER)

AS

DECLARE I INTEGER = 1;

DECLARE J INTEGER = 1;

BEGIN

WHILE (I <= CHAR_LENGTH(IDS)) DO

BEGIN

IF (',' = SUBSTRING(IDS FROM I FOR 1)) THEN

BEGIN

ID = SUBSTRING(IDS FROM J FOR I - J);

FOR SELECT "Id" FROM "RssFeedItems" WHERE "Id" = :ID INTO :ID DO

SUSPEND;

I = I + 1;

J = I;

END

I = I + 1;

END

END

Мдааааа ...

В този ред на мисли ....

Ако сте решили да вкарвате да кажем Java обект в базата трябва да не забравяте, че обекта трябва да бъде сериализируем. Най-грубо създавате си масив от байтове, който отговаря на това изискване и вкарвате масива в базата данни.

Нещо от сорта:

// -----------------------------------------------------------------//

//

// Ако сме решили да вкарваме Java обект във Firebird база данни

//

// ---------------------------------------------------------------- //

SomeObject o = new SomeObject();

ByteArrayOutputStream bout = new ByteArrayOutputStream();

ObjectOutputStream out = new ObjectOutputStream(bout);

out.writeObject(o);

pst.setBytes(1,bout.toByteArray());

pst.execute();

Преди време имаше бурна дискусия по темата и съм съхранил примера. Може да се окаже полезен за нещо.

Мисля, че няма нужда от допълнителни коментари към кода, но ако се налага ще ги добавя.

Хубаво е, че са възможни различни интерпретации ...

Има и едно мнение, което ще си позволя да цитирам:

" ...

Драйверът на Firebird SQL-1.5.5JDK 1.4 - JDBC се нарича JayBird.

Прието е setObject да се използва за да не пишем неща от рода на:

if( o instanceof String)

setString..

else if( o instanceof Integer)

setInt(...

Правилният подход е да се ползва InputStream и setBlob.

Най-правилно обаче е да не се съхраняват обекти в BLOB полетата, а да се използват mapping обекти. ... "

Много интересна тема. Това вече започва да прилича на дискусия.

Кой точно вариант да се избере? Това вече е изкуство. :bigwink:

С най-добри пожелания

Г.Т.Герасимов

P.S. Кодът не е красиво подреден, за което се извинявам.

Притеснявам се, че подходът при SQL, C++ и Delphi се различава в нюансите, а там понякога са най-важните моменти. Дано информацията ви бъде от полза.

Link to comment
Share on other sites

  • Глобален Модератор

****

P.S. Кодът не е красиво подреден, за което се извинявам.

Притеснявам се, че подходът при SQL, C++ и Delphi се различава в нюансите, а там понякога са най-важните моменти. Дано информацията ви бъде от полза.

Красивата подредба ще я направя в сорса. :bigwink:

Много съм ти задължен за помощта .. идва съвсем навреме.:good:

...

За нюансите имаш право. Ще ползвам С#, който не е нейтив с Файрбърда, но .... той е безплатен.

При писането на продуктът, който в момента работи /писан на Delphi / имаше спорове в екипа за дейта модула на какво е най-рационално да бъде написан. Колебаехме се между С++ Builder и Delphi . В крайна сметка остана на Delphi.

В момента се колебаем за сервиза. Има вариант да бъде написан на С++ вместо на С шарп... отново не съм сигурен кой е по-добрия вариант.

...

И така ... отново искам да ти благодаря.

Поздрави Б.

Link to comment
Share on other sites

  • Потребител

Здравейте,

Ако ми позволите искам да Ви предложа една интересна алтернатива при избора на език за програмиране.

Ако твърдо държите да работите на C, може да се включите в някоя от програмите на Microsoft за разработчици.

Получавате лицензи за сървър, MS SQL, Visual Studio и още куп безплатни благини. Цялото удоволствие струва 100 USD за три години. Това са около 50 лева на година, което е по-малко от хостинг пакет в България.

Освен това ще може да ползвате няколко много силни партньорски мрежи. Друг вариант е подобна програма на IBM или Novell (в момента има две активни такива).

Ако обаче основате е била Delphi, препоръчвам ви да не бягате от езика. Веднага ще се аргументирам.

В Delphi може да напишете нещо от сорта:

ConsoleMemo.Lines.Append(format('Host %s reports destination network unreachable.',[iCMP.ReplyStatus.FromIpAddress]));

За същото в C, C+++, C# ще се наложи да се поизпотите сериозно.

Четох внимателно въпросите, които поставяте. Разбирам, че проектът не е предназначен за България (а дори да е, това не е толкова важно).

Ако тествате при едновременно работещи 1000 потребители е едно. Ако обаче се наложи да тествате при 50000, 100000 тогава ще се появят други въпроси. Подобни тестове в България няма как да бъдат извършени.

Сега да приемем, че се наложи да "разпределите" базата с данни на няколко отдалечени сървъра.

Макар това предположение да е чисто хипотетично то може да се случи. Да кажем единият сървър е в София, втори във Варна, а трети в Русе. Пускате заявка, която трябва да "събере" информация от трите и да ги обедини в общ report.

Тук сме в една часова зона. В САЩ са в няколко часови зони.

Както виждате има въпроси, които не "стоят" пред българските разработчици. Те са като подводни камъни, но са си там.

На теория всичко е лесно. Синхронизация, обединение и пр. и пр.. Практиката обаче е много жесток учител.

Какво мога да Ви посъветвам?

Изберете Lazarus като платформа за програмиране. Разбирам, че бюджета ви е силно ограничен (нещо нормално). Lazarus e безплатен и е мощна среда за разработка. Няма да се налагате да преобразувате код. Ето малък пример:

{$IFDEF Linux}

// Ако операционната система е Linux какви библиотеки ще ползваме ....

{$ELSE}

// Ако е Windows ... и т.н.

{$ENDIF}

Задаването на опции за компилатора ще ви спести много от безценното време за разработка.

Има и друг важен момент. Снощи дълго време ми убягваше, но днес си спомних за него.

Успях да открия цитата и веднага Ви го изпращам, защото е много, ама много важен.

ВАЖЕН ЦИТАТ:

" .... В Interbase, до версия 6.01, може да създавате "генератори" до момента, в който общото им количество не надхвърли 32767 (много важно число). Kакво ще се случи когато надхвърлите тази стойност зависи само и единствено от използваната версия на СУБД.

InterBase 6 (например) ще генерира грешка от вида: invalid block type, тъй като получените стойности надхвърлят паметта, заемана от странницата и резервирана от генератора. При други версии грешките ще имат друг характер.

Това, което може да ви създаде сериозни проблеми е, че при други версии НЯМА ДА СЕ ПОЛУЧИ ГРЕШКА, А МЪЛЧАЛИВО РАЗРУШАВАНЕ НА ОБЛАСТ ОТ БАЗАТА ДАННИ, ЗА КОЕТО НАЙ-МАЛКО ПРЕДПОЛАГАТЕ."

Това е.

Не е страшно, когато знаем, че имаме грешка. Страшно е ако системата работи, няма грешка, но ... нещо вътре не е както трябва.

Като цяло има неща, с които трябва доста да се внимава. Не, че е невъзможно да се избегнат, но ако имате ясно формулирани срокове може да закъснеете, а това ще доведе до неустойки и затруднения (тук в мен заговори администратора и ръководителя). Павел може да ви даде много детайлни разяснения по темата, но в момента е силно ангажиран, за което моля да бъде извинен.

Така, че ако питате мен стремете се да се придържате колкото е възможно по-близо до първоизточника.

При Delphi нещата са малко по-сложни.

Може да ползвате Turbo Delphi. Лицензът е за 30 години и е free.

Проблемът при Delphi e ... цената.

Професионалните версии на продукта са около 4000 USD, но получавате три много важни продукта и пълен достъп до една "различна" световна мрежа, която ... Най-простичко казано там е като пещерата на Али Баба за програмиста. :bigwink:

Ако наистина ползвате "външно" финансиране помолете за 30% авансово заплащане. При договор от подобен мащаб (освен ако не сте freelancer) парите ще са достатъчни за закупуване нужните лицензи. Няма да имате проблем от страна на САЩ, но тук и в ЕС ще имате доста сериозни главоболия (най-малко ще ви спретнат жестока данъчна ревизия). Но и тук има решение. България има сключени договори за избягване на двойното данъчно облагане. Ползата от това е огромна. :bigwink:

Не се притеснявайте. Ще се справите. Ще помагам с каквото мога в рамките на възможностите си. Все пак не съм експерт в базите данни.

С най-добри пожелания

Г.Т.Герасимов

Link to comment
Share on other sites

  • Глобален Модератор

Здравейте г-н Герасимов,

Идея си нямате колко ценна е помощта Ви за мен и екипът ми с тези мнения, които публикувахте на тема Firebird и Interbase.

С ваше позволение бих искал да отделя вашите постове в отделна тема, с цел по-голяма четимост.

Отново бих искал да ви благодаря ...

Поздрави Б.Богданов

Link to comment
Share on other sites

  • Потребител

В Delphi може да напишете нещо от сорта:

ConsoleMemo.Lines.Append(format('Host %s reports destination network unreachable.',[iCMP.ReplyStatus.FromIpAddress]));

За същото в C, C+++, C# ще се наложи да се поизпотите сериозно.

За C# не съм съгласен с това твърдение.

Същото може да се напише с 1 ред:

ConsoleTextBox.Text = ConsoleTextBox.Text + String.Format("Host {0}s reports destination network unreachable.{1}", ipAddress.ToString(), Environment.NewLine);

Избора на програмен език трябва да се определя от няколко фактора:

1. Нивото на опит на програмистите с дадения език (развойна среда, компоненти и т.н), които работят върху проекта.

2. Изискванията на клиента. Все пак софтуера трябва да се поддържа след като веднъж влезе в експлоатация.

3. Наличен софтуер - ако вече имаш закупени лицензи за Delphi, какъв е смисъла да купуваш такива за Visual Studio, освен ако разходите не се оправдават от клиента или от стратегията за развитие на фирмата.

Получавате лицензи за сървър, MS SQL, Visual Studio и още куп безплатни благини. Цялото удоволствие струва 100 USD за три години. Това са около 50 лева на година, което е по-малко от хостинг пакет в България.

Наистина ли? Аз мислех, че най-евтиния е от порядъка на $500 на година....

Моля, ако имаш линк с такава промоция, да го публикуваш в тази тема.

Link to comment
Share on other sites

  • Потребител

Здравейте,

Да. За C# сте абсолютно прав. Грешката е моя. Просто бързо изписване. :head_hurts_kr:

Сега за програмите.

Преди две години Microsoft стартираха програмите Microsoft Website Spark и Biz Spark. Лично аз се регистрирах през московския им офис. В България официална информация по темата бе публикувана три седмици след като първия етап на програмата приключи.

Не знам откъде е тази неприязън към Microsoft тук. :post-20645-1121105496:

Само за сравнение.

В град Ярославл (близо до Mосква) за Microsoft работят над няколко хиляди (не е грешка) независими разработчици. Най-забавни са web-минарите, които редовно се организират. На тях колегите се събират в някое кафе и веселбата е безкрайна.

Тук има подобни събирания на Silverlight обществото. Доколкото знам никой не е поискал на никого и лев за ползваната зала и лекционно оборудване. За съжаление успях да присъствам само на една от сбирките, но мога убедено да твърдя, че това е прекрасна форма за обмен на знания и опит при това напълно безплатна. Предполагам, че колегите от Телерик могат да предоставят по-изчерпателна информация.

Подобни програми имат и Novell и IBM. Ако не греша те са отворени.

Ето и официалните адреси на две от програмите на Microsoft:

http://www.microsoft.com/bizspark/

http://www.microsoft.com/web/websitespark/

За Novell:

https://secure-www.novell.com/center/ICSLogin/?"https://secure-www.novell.com/center/regadmin/jsps/home_app.jsp"

Има и за ИБМ и за ORACLE, но просто адресите не са ми под ръка.

Съществуват много програми. Просто трябва да се четат информационните бюлетини. Хората са си написали всичко и не съм забелязал нещо да крият. :bigwink:

КАКВО ОБАЧЕ БИ СЛЕДВАЛО ДА ЗНАЕТЕ?

Всяка програма има своя специфика. Участието в някоя от автоматично може да Ви създаде проблем с европейските субсидиращи организации (ако работите по 6-та или 7-ма рамкова програма).

Аз лично предпочитам Microsoft и IBM (така и не схванах как точно се конкурират, като интересите им са в доста различни сфери, а и често взаимно се допълват). При тези програми Ви се предоставя възможност да се развивате.

ВАЖНО ОБАЧЕ Е ДА ПРАВИТЕ СВОЙ СОФТУЕР!

Хората подкрепят тези, които са креативни. Нищо, че няма да е красив, перфектен и пр.. Въпросът е да е ВАШ продукт.

Ако работите Ви се предоставя шанс.

Не знам какво е да се работи по поръчка за някого. Нашата политика е да изработваме софтуер, който е наш. Ние сме собственици на лиценза и го предоставяме на организации, които го дистрибутират. Разликата е огромна. Ние решаваме какво и как. Ако на някого не му харесва, това, което предлагаме има и други. :biggrin::bigwink:

Е, вярно, че се налага да работим здраво и да цепим стотинката, но ... ние сме от Севлиево, а тук сме по-големи скрънзи и от Габровци. :bigwink:

Що се отнася до цените на хостинг пакетите, стандартните са около 7 лева на месец без ДДС. Цените са достъпни и ги има навсякъде в мрежата. :bigwink:

Вижте какво предлагат например infodatacenter.com. Там може направо да си наемете виртуален сървър или виртуален компютър и да си тествате каквото ви харесва при това на съвсем достъпни цени. Звъннете им един телефон и се разберете. Момчетата са точни.

А сега за протокола.

Аз не съм някакъв изявен експерт. Имам някои и друг успешен проект, но имам много да уча. Не приемайте мнението ми като миродавно. Просто споделям неща, които са "личен опит". :bigwink:

С най-добри пожелания

Г.Т.Герасимов

P.S. Само да добавя, че сте изключително прав и за критериите за избор на програмен език. Формулировката е изключително прецизна. Ако ми позволите ще Ви цитирам при първа възможност. Още веднъж Ви пожелавам успешен ден.

Link to comment
Share on other sites

Напиши мнение

Може да публикувате сега и да се регистрирате по-късно. Ако вече имате акаунт, влезте от ТУК , за да публикувате.

Guest
Напиши ново мнение...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Зареждане...

За нас

"Форум Наука" е онлайн и поддържа научни, исторически и любопитни дискусии с учени, експерти, любители, учители и ученици.

За своята близо двайсет годишна история "Форум Наука" се утвърди като мост между тези, които знаят и тези, които искат да знаят. Всеки ден тук влизат хиляди, които търсят своя отговор.  Форумът е богат да информация и безкрайни дискусии по различни въпроси.

Подкрепи съществуването на форумa - направи дарение:

Дари

 

 

За контакти:

×
×
  • Create New...