Re: Хранениетелеметрии
Yurij wrote: Такое чувство что не взлетит на FB. На весьма хорошем железе взлетит и на FB, имхо. Вопрос не только в железе. Больше к алгоритмам работы FB которые мало оптимизированы на такие объёмы. Предел номера транзакции, скорость prepare, размер TIP и PIP, глубина индексов, не 100% заполнение страниц данными, невозможность кластерных индексов и т.п. Еще можно попробовать round-robin database. rrdtool хорошо, но надо узнать переживет ли он такие объемы. В моём случае это не столь привлекательно, т.к. первые N лет данные просто копятся без удаления. подходящее для индексов по времени (тут сразу же всплывет вопрос, как сделать чтобы индекс оставался согласованным с данными при любых падениях). Индекс по времени не нужен, т.к. файлы должны заполнятся упорядоченно.
Re: Хранениетелеметрии
Alexey Popov ... Yurij wrote: Такое чувство что не взлетит на FB. На весьма хорошем железе взлетит и на FB, имхо. Вопрос не только в железе. Больше к алгоритмам работы FB которые мало оптимизированы на такие объёмы. Ну-ка, ну-ка, хотелось бы подробнее... Предел номера транзакции, Причём тут такие объёмы ??? скорость prepare, Что там не так ? *Одноразовое* чтение всех PP ? Или ты собрался терабайтную БД на декстопе с одним винтом и 1GB памяти обрабатывать ? размер TIP и PIP, И ? Это к чему ? глубина индексов, А тут что не так ??? не 100% заполнение страниц данными, Это к dbf\csv\txt - там 100%. невозможность кластерных индексов Это можно принять с бооольшими оговорками. И то только после анализа запросов, которые ты не показал. и т.п. ы ? -- Хорсун Влад PS 1. Задачу ты вообще не описал, поэтому говорить что-то конкретное невозможно. 2. Я не говорю, что FB идеально подходит для работы с релаьно большими объёмами, но ты не привёл ни одного настоящего аргумента против. 3. Ни слова об *алгоритмах работы FB которые мало оптимизированы* я так и не увидел
Re: Хранениетелеметрии
Vlad Khorsun wrote: Предел номера транзакции, Причём тут такие объёмы ??? Предел в 2 миллиарда транзакций непреодолим. Остальные утверждения были больше вопросами не 100% заполнение страниц данными, Это к dbf\csv\txt - там 100%. Если в базу делается только insert и select, то увеличивать размер файла БД в разы невозможность кластерных индексов Это можно принять с бооольшими оговорками. И то только после анализа запросов, которые ты не показал. Запросы за интервал времени или последние измерения. С фильтром по множеству датчиков. Например если записи перемешать рандомно в таблице, то даже при наличии индекса по времени, будет очень грустно на больших выборках. 1. Задачу ты вообще не описал, поэтому говорить что-то конкретное невозможно. Что тебе ещё хочется знать? 2. Я не говорю, что FB идеально подходит для работы с релаьно большими объёмами, но ты не привёл ни одного настоящего аргумента против. Партиционирование? Быстрое удаление устаревших данных?
Re: JayBird + Firebird Embedded на Win 7
Если кому-то нужно решение проблемы, то читайте тут: http://tech.groups.yahoo.com/group/Firebird-Java/message/10464
Re: JayBird + Firebird Embedded на Win 7
В письме от Sat, 20 Aug 2011 02:50:39 +0400, Oleg Matveyev oleg.matve...@gmail.com сообщал: вероятно потому, что для x64 тебе надо использовать 64битную FBEmbedded.dll Это должно зависеть от битности Eclipse и JVM - а про них и не сказано какие они -- Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/
Re: Хранениетелеметрии
Alexey Popov ... Vlad Khorsun wrote: Предел номера транзакции, Причём тут такие объёмы ??? Предел в 2 миллиарда транзакций непреодолим. Ну так не надо в него стучаться лбом - это больно и не нужно :) В 3-ке сделаем 4млрд. Потом посмотрим на возможность дальнейшего расширения этого лимита. Остальные утверждения были больше вопросами Гм. Наверное я отстал от жизни и разучился читать, но вопросов там не было... не 100% заполнение страниц данными, Это к dbf\csv\txt - там 100%. Если в базу делается только insert и select, то увеличивать размер файла БД в разы Это претензия конкретно к ФБ или вообще к БД ? невозможность кластерных индексов Это можно принять с бооольшими оговорками. И то только после анализа запросов, которые ты не показал. Запросы за интервал времени или последние измерения. С фильтром по множеству датчиков. Например если записи перемешать рандомно в таблице, то даже при наличии индекса по времени, будет очень грустно на больших выборках. И откуда возьмётся случайное перемешивание, если данные приходят с датчиков весьма последовательно - т.е. кластеризация по времени и так присутствует натуральным образом ? 1. Задачу ты вообще не описал, поэтому говорить что-то конкретное невозможно. Что тебе ещё хочется знать? Мне - ничего, это твоя задача и тебе с ней жить :) Меня больше интересуют реально слабые места в алгоритмах, реализованных в ФБ, какие их них более критичны и должны быть доработаны в первую очередь. 2. Я не говорю, что FB идеально подходит для работы с релаьно большими объёмами, но ты не привёл ни одного настоящего аргумента против. Партиционирование? Быстрое удаление устаревших данных? Это (партиционирование для удаления устаревших данных) легко сделать и вручную. Я тебе больше скажу - можно сделать и шардинг на несколько хостов, например по ИД датчика. Было бы желание. -- Хорсун Влад
Re: JayBird + Firebird Embedded на Win 7
denixx baykin ... Ааа. Зря я там спросил, наверное :) Берёшь свои слова назад ? :) Ведь на манеже всё те же. :) Это ты о чём ? Ты здесь часто встречал Романа (Roman Rokytskyy) или Mark Rotteveel ? -- Хорсун Влад
Re: JayBird + Firebird Embedded на Win 7
IMHO мне сразу показалась сама идея странной: JB+ Emb. ведь Emb подразумевает распостраняемое приложение, которое можно легко запустить - без установки. но: 1. неизвестно, есть ли вообще той машине, где будем запускаться - Java. 2. если она есть - то какая она - 64/32бита p.s. тоже относится и .Net+Emb
Re: JayBird + Firebird Embedded на Win 7
В почте текст вижу, в веб-интерфейсе не вижу. Берёшь свои слова назад ? :) Слова назад беру. :) Это ты о чём ? Ты здесь часто встречал Романа (Roman Rokytskyy) или Mark Rotteveel ? Романа я тут вроде видел, он даже отвечал на какой-то вопрос. Посмотрел - это было в 2006-2008 годах ) Так что да, хорошо, что там спросил.
Re: JayBird + Firebird Embedded на Win 7
21 августа 2011 г. 14:48 пользователь Oleg Matveyev o_matv...@mail.ruнаписал: но: 1. неизвестно, есть ли вообще той машине, где будем запускаться - Java. 2. если она есть - то какая она - 64/32бита Приложение для узкого круга пользователей, там уж разберемся, какая ява на компе стоит ) Ну и, естественно, битность тоже определить не проблема (java -version всё расскажет). Яву, как оказалось, установить проще, чем MySQL. У друга, например, сервер MySQL не устанавливается. Точнее устанавливается, но root не добавляется. А какой же это сервер без root'а? Ну и не последнее значение имеет то, что в случае embedded-базы в ней уже будут забиты все хранимые процедуры и таблицы, за программой остаётся только её наполнение. А в MySQL надо ещё и подготовить скриптом базу данных перед использованием.
Re: Хранениетелеметрии
Vlad Khorsun wrote: Предел в 2 миллиарда транзакций непреодолим. Ну так не надо в него стучаться лбом - это больно и не нужно :) Не, экономить номера транзакций тут нет никакого желания. В 3-ке сделаем 4млрд. Потом посмотрим на возможность дальнейшего расширения этого лимита. Это уже новая ОДС. Если в базу делается только insert и select, то увеличивать размер файла БД в разы Это претензия конкретно к ФБ или вообще к БД ? Нельзя для отдельный таблицы установить 100% fill rate. И откуда возьмётся случайное перемешивание, если данные приходят с датчиков весьма последовательно - т.е. кластеризация по времени и так присутствует натуральным образом ? Я про то, что это никто не гарантирует явно. Например b/r теоретически может всё изменить. Да и вставка может происходить пакетно по датчикам, что приведёт к перемешиванию. Партиционирование? Быстрое удаление устаревших данных? Это (партиционирование для удаления устаревших данных) легко сделать и вручную. Я тебе больше скажу - можно сделать и шардинг на несколько хостов, например по ИД датчика. Было бы желание. Нет, только не вручную - дробить один файл БД на множество мелких... это кривизна в обработке.
Re: Хранениетелеметрии
Alexey Popov avp@... writes: И откуда возьмётся случайное перемешивание, если данные приходят с датчиков весьма последовательно - т.е. кластеризация по времени и так присутствует натуральным образом ? Я про то, что это никто не гарантирует явно. Например b/r теоретически может всё изменить. Да и вставка может происходить пакетно по датчикам, что приведёт к перемешиванию. Там есть печаль с такими данными, связанная с равномерным приходом данных по времени и индексам. Если выбирать данные по одному датчику по индексу, то оно читает примерно так одна запись из таблицы - одно чтение страницы данных. Потому что на этой странице все остальные записи - от других датчиков за то же время. Т.е. хочешь, не хочешь, а партиционировать придется, если нужны быстро данные по одному датчику за период времени.
Re: Хранениетелеметрии
Это уже новая ОДС. донкихотанама
Re: Хранение телеметрии
Yurij wrote: Там есть печаль с такими данными, связанная с равномерным приходом данных по времени и индексам. Если выбирать данные по одному датчику по индексу, то оно читает примерно так одна запись из таблицы - одно чтение страницы данных. Потому что на этой странице все остальные записи - от других датчиков за то же время. Да, именно так. Этого и хочется избежать. Т.е. хочешь, не хочешь, а партиционировать придется, если нужны быстро данные по одному датчику за период времени. Да, это одна из основных задач. Ещё аналогичная задача - выборка по группе датчиков (10-30 за раз). Получается нужно двухмерное партиционирование: датчик+интервал дат. Либо отдельными файлами БД, либо таблицами внутри БД. Внутри БД конечно удобнее, но страницы между таблицами будут перемешиваться при реальной работе :(, только b/r будет дефрагментировать.
Re: JayBird + Firebird Embedded на Win 7
В письме от Sun, 21 Aug 2011 15:48:10 +0400, Oleg Matveyev o_matv...@mail.ru сообщал: 1. неизвестно, есть ли вообще той машине, где будем запускаться - Java. Так можно её с собой таскать просто, в подпапке. Как делают IBM Lotus Notes, IBM Symphony (примеры Eclipse RCP) -- Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/
Посоветуйте пожалуйста среду разработки для Firebird 2.5
Посоветуйте пожалуйста среду разработки для Firebird 2.5 Переделываю хранимые процедуры из БД MySQL в БД Firebird. Процедуру пытаюсь создавать при помощи IBExpert. Это вменяемая среда? FlameRobin вроде уже устарел на несколько лет. Читал здесь про среды разработки: http://ru.wikipedia.org/wiki/Firebird#.D0.A1.D1.80.D0.B5.D0.B4.D1.81.D1.82.D0.B2.D0.B0_.D1.80.D0.B0.D0.B7.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B8_.D0.B8_.D0.B0.D0.B4.D0.BC.D0.B8.D0.BD.D0.B8.D1.81.D1.82.D1.80.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F Но их там много Меня очень радует IBExpert при создании хранимой процедуры в случае ошибок текст # Тип Текст 1 Ошибка Parsing error! И хз, что там оно от меня хочет.
Re: Посоветуйте пожалуйста среду разработки для Firebird 2.5
Здравствуйте, denixx. Вы писали 21 августа 2011 г., 23:56:08: Посоветуйте пожалуйста среду разработки для Firebird 2.5 Переделываю хранимые процедуры из БД MySQL в БД Firebird. Процедуру пытаюсь создавать при помощи IBExpert. Это вменяемая среда? Это одна из самых вменяемых. Для русскоязычных - бесплатна. Есть еще какой-то инструмент, сходный, и наверное примерно такой же вменяемости, но платный для всех без исключения, потому тут распространения не получил. -- С уважением, Владимир mailto:fr...@academ.org
Re: Посоветуйте пожалуйста среду разработки для Firebird 2.5
21 августа 2011 г. 20:11 пользователь Владимир Аксенов fr...@academ.orgнаписал: Это одна из самых вменяемых. Ну раз так, то напрашивается ещё одна тема :)
Re: Хранениетелеметрии
Alexey Popov ... Vlad Khorsun wrote: Предел в 2 миллиарда транзакций непреодолим. Ну так не надо в него стучаться лбом - это больно и не нужно :) Не, экономить номера транзакций тут нет никакого желания. Если ты собрался каждое показание сохранять в отдельной тр-ции, то я такое не лечу, это в другое учреждение :) В 3-ке сделаем 4млрд. Потом посмотрим на возможность дальнейшего расширения этого лимита. Это уже новая ОДС. Да. И ? Если в базу делается только insert и select, то увеличивать размер файла БД в разы Это претензия конкретно к ФБ или вообще к БД ? Нельзя для отдельный таблицы установить 100% fill rate. Тоже в рамках старой ОДС не будет. И ? И откуда возьмётся случайное перемешивание, если данные приходят с датчиков весьма последовательно - т.е. кластеризация по времени и так присутствует натуральным образом ? Я про то, что это никто не гарантирует явно. Например b/r теоретически может всё изменить. Да и вставка может происходить пакетно по датчикам, что приведёт к перемешиванию. Вставляй показания пакетами в небольшие блобы. Да, усложнится прикладное приложение, я знаю. А кому сейчас легко ? (ц) И чем это принципиально отличается от плоских файлов в файловой системе ? Партиционирование? Быстрое удаление устаревших данных? Это (партиционирование для удаления устаревших данных) легко сделать и вручную. Я тебе больше скажу - можно сделать и шардинг на несколько хостов, например по ИД датчика. Было бы желание. Нет, только не вручную - дробить один файл БД на множество мелких... это кривизна в обработке. Много БД - это криво, а множество плоских файлов - это уже прямо ? :-D Что бы ты не выбрал - от той или иной ручной работы никак не уйдёшь. Такова селява. -- Хорсун Влад
Re: Посоветуйте пожалуйста среду разработки для Firebird 2.5
FlameRobin вроде уже устарел на несколько лет. Вру, в апреле 2011 вышла свежая версия. Но я не пробовал её.
Re: Хранениетелеметрии
21 августа 2011 г. 20:21 пользователь Vlad Khorsun hv...@optima.com.uaнаписал: Такова селява. Хорошее выражение, надо бы запомнить :)
Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
Я что-то слишком назойлив стал :) Но это вроде последнее, что останавливает от перехода на Firebird. Есть таблица sector, в неё посредством хранимой процедуры вставляется или изменяется запись. Итак, хранимая процедура в MySQL, как она есть: CREATE DEFINER=`root`@`localhost` PROCEDURE `addOrChangeRecord`( v BIGINT, _id BIGINT, segmentId INT, socialId VARCHAR(25), fullName VARCHAR(50), photoUrl TINYTEXT, registrationTime DATETIME, _level INT, sectorName VARCHAR(50), x INT, y INT, caravanSpeed DOUBLE, occupantUserId BIGINT, sectorSkinTypeId BIGINT) BEGIN IF EXISTS (select 1 from `WarRules`.`sector` where id = _id) THEN UPDATE `WarRules`.`sector` SET `v` = v, `id` = _id, `segmentId` = segmentId, `socialId` = socialId, `fullName` = fullName, `photoUrl` = photoUrl, `registrationTime` = registrationTime, `level` = _level, `sectorName` = sectorName, `x` = x, `y` = y, `caravanSpeed` = caravanSpeed, `occupantUserId` = occupantUserId, `sectorSkinTypeId` = sectorSkinTypeId WHERE id=_id; select CONCAT('ID: ', _id , ' FullName: ', fullName , ' Запись обновлена.'); ELSE INSERT INTO `WarRules`.`sector` ( `v`, `id`, `segmentId`, `socialId`, `fullName`, `photoUrl`, `registrationTime`, `level`, `sectorName`, `x`, `y`, `caravanSpeed`, `occupantUserId`, `sectorSkinTypeId` ) VALUES ( v, _id, segmentId, socialId, fullName, photoUrl, registrationTime, _level, sectorName, x, y, caravanSpeed, occupantUserId, sectorSkinTypeId ); select CONCAT('ID: ', _id , ' FullName: ', fullName , ' Запись добавлена.'); END IF; END IBExpert create or alter procedure ADDORCHANGERECORD ( _V bigint, _ID bigint, _SEGMENTID integer, _SOCIALID varchar(25), _FULLNAME varchar(50), _PHOTOURL blob sub_type 1 segment size 255, _REGISTRATIONTIME timestamp, _LEVEL integer, _SECTORNAME varchar(50), _X integer, _Y integer, _CARAVANSPEED double precision, _OCCUPANTUSERID bigint, _SECTORSKINTYPEID bigint) as begin if (EXISTS(select 1 from sector where id = _ID)) THEN BEGIN UPDATE sector SET v = _V, id = _ID, segmentId = _SEGMENTID, socialId = _SOCIALID, fullName = _FULLNAME, photoUrl = _PHOTOURL, registrationTime = _REGISTRATIONTIME, level = _LEVEL, sectorName = _SECTORNAME, x = _X, y = _Y, caravanSpeed = _CARAVANSPEED, occupantUserId = _OCCUPANTUSERID, sectorSkinTypeId = _SECTORSKINTYPEID WHERE id=_ID; select CONCAT('ID: ', _ID , ' FullName: ', _FULLNAME , ' Запись обновлена.'); END ELSE BEGIN INSERT INTO sector ( v, id, segmentId, socialId, fullName, photoUrl, registrationTime, level, sectorName, x, y, caravanSpeed, occupantUserId, sectorSkinTypeId ) VALUES ( _V, _ID, _SEGMENTID, _SOCIALID, _FULLNAME, _PHOTOURL, _REGISTRATIONTIME, _LEVEL, _SECTORNAME, _X, _Y, _CARAVANSPEED, _OCCUPANTUSERID, _SECTORSKINTYPEID ); select CONCAT('ID: ', _ID , ' FullName: ', _FULLNAME , ' Запись добавлена.'); END end Если возле ' Запись обновлена.'); оставить символ ;, то IBExpert указывает на окончание этой строки. Если точку с запятой убрать, то указывает на следующий END. Не пойму, что он от меня тут хочет. Дальше я пока не правил сильно. Правильно ли я использую переменные, передаваемые в хранимую процедуру? _ID, с кавычками?
Re: Хранениетелеметрии
Alexey Popov avp@... writes: Yurij wrote: Получается нужно двухмерное партиционирование: датчик+интервал дат. Либо отдельными файлами БД, либо таблицами внутри БД. Когда целым кагалом решали подобную задачу в Postgresql, к этому и пришли - сначала партиции по датчикам, а потом перенос в партиции по интервалам дат. Внутри БД конечно удобнее, но страницы между таблицами будут перемешиваться при реальной работе :(, только b/r будет дефрагментировать. Более всего в таких задачах напрягает, что адекватно предсказать влияние таких факторов на производительность без натурных экспериментов сложно.
RE: Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
Все не правильно Пример: наверное дальше сам сообразишь. CREATE OR ALTER PROCEDURE COPYORDER ( fromcdorder integer, tocdorder integer, flags integer = 0) as declare variable cdthing integer; declare variable cdmsh integer; declare variable comment varchar(255); declare variable price double precision; declare variable nds double precision; declare variable nds_p double precision; declare variable pricesumm double precision; declare variable cdasklist integer; declare variable cellcount integer; declare variable fromcdmainal integer; declare variable tocdmainal integer; declare variable addhand integer; declare variable c integer; declare variable cdmain integer; declare variable oldcode char(6); declare variable tarif_p double precision; declare variable tarif_summ double precision; declare variable fromcdspecver integer; declare variable tocdspecver integer; declare variable cdmain2 integer; declare variable howmany double precision; declare variable numcell varchar(100); declare variable cdmaincell integer; declare variable fromcdspecref integer; declare variable tocdspecref integer; declare variable fromcdspecvercell integer; declare variable tocdspecvercell integer; declare variable options integer; declare variable fromvalue0 varchar(255); declare variable tovalue0 varchar(255); declare variable cdmain1 integer; declare variable cdchk integer; declare variable value1 varchar(255); declare variable value2 varchar(255); declare variable from_annotate blob sub_type 1 segment size 80; declare variable obozncell varchar(100); declare variable dogorder varchar(100); declare variable cdasklistfield integer; declare variable cell integer; declare variable cdspecver integer; declare variable cdspecvernew integer; declare variable cdnmclparam integer; declare variable cdspecref integer; begin select cdThing, cdMsh, HowMany, Comment, Price, NDS, NDS_P, cdMainAL, PriceSumm, cdAskList, CellCount, Options, Annotate from OrderRef where cdOrder = :FromcdOrder into :cdThing, :cdMsh, :HowMany, :Comment, :Price, :NDS, :NDS_P, :FromcdMainAL, :PriceSumm, :cdAskList, :CellCount, :Options, :From_Annotate; delete from OrderTarifList where cdOrder = :TocdOrder; for select cdMain, Tarif_P, Tarif_Summ from OrderTarifList where cdOrder = :FromcdOrder into :cdMain, :Tarif_P, :Tarif_Summ do insert into OrderTarifList (cdOrder, cdMain, Tarif_P, Tarif_Summ) values (:TocdOrder, :cdMain, :Tarif_P, :Tarif_Summ); update OrderRef set cdThing = :cdThing, cdMsh = :cdMsh, HowMany = :HowMany, Comment = :Comment, Price = :Price, NDS = :NDS, NDS_P = :NDS_P, PriceSumm = :PriceSumm, cdAskList = :cdAskList, CellCount = :CellCount, Options = :Options, Annotate = :From_Annotate where cdOrder = :TocdOrder; Delete from AskListMainFields where cdOrder = :TocdOrder; end
Re: Помогите пожалуйста разобраться с хранимой процедурой в IBExpert.
denixx baykin ... Я что-то слишком назойлив стал :) Но это вроде последнее, что останавливает от перехода на Firebird. Без чтения базовой документации или хотя бы примеров - ничего не получится. SELECT в воздух не делается. Разберись сначала с конструкциями PSQL. -- Хорсун Влад
Re: JayBird + Firebird Embedded на Win 7
Если кому-то нужно решение проблемы, то читайте тут: http://tech.groups.yahoo.com/group/Firebird-Java/message/10464 Привет! After that i have added the jaybird22_x64.dll to the project folder. А где ты взял jaybird22_x64.dll?