Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как мапировать данные класса со свойствами %FileBinaryStream? / 25 сообщений из 25, страница 1 из 1
12.01.2012, 10:13
    #37610467
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
Мапировать глобалы научился... А вот как мапировать данные класса со свойствами %FileBinaryStream?
Сделал класс
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
/// tmp
Class soi.data.tmp Extends %Persistent
{

/// test
Property test As %FileBinaryStream;

}


Потом программку
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
save
	n
	s file="\\ksa\box\tmp\t.jpg"
	s of=##class(%File).%New(file)
	d of.Open("RU")
	s oc=##class(soi.data.tmp).%New()
	d oc.test.CopyFrom(of)
	d oc.%Save()
	d of.Close()
	k oc
	k of
	q


Запись прошла без ошибок и файл потом записался обратно без проблем
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
load
	n
	s file="\\ksa\box\tmp\test.jpj"
	s oc=##class(soi.data.tmp).%OpenId(1)
	s of=##class(%File).%New(file)
	d of.Open("WNU")
	d of.CopyFrom(oc.test)
	d of.Close()
	k oc
	k of
	q


Но глобала ^soi.data.tmpD я не обнаружил... Но в каталоге stream в соответствующей БД я обнаружил файл с данными...

Глобал появился только когда добавил обычное поле
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
/// tmp
Class soi.data.tmp Extends %Persistent
{

/// test
Property test As %FileBinaryStream;

/// str
Property str As %String;

}


и поменял программку
Код: vbnet
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.
test
load
	n
	s file="\\ksa\box\tmp\test"
	s oc=##class(soi.data.tmp).%OpenId(3)
	s file=file_"."_oc.str
	s of=##class(%File).%New(file)
	d of.Open("WNU")
	d of.CopyFrom(oc.test)
	d of.Close()
	k oc
	k of
	q
save
	n
	s file="\\ksa\box\tmp\t.jpg"
	s of=##class(%File).%New(file)
	d of.Open("RU")
	s oc=##class(soi.data.tmp).%New()
	zw oc
	s val=$re(file)
	s val=$p(val,".")
	s val=$re(val)
	s oc.str=val
	d oc.test.CopyFrom(of)
	d oc.%Save()
	d of.Close()
	k oc
	k of
	q


Причём глобал отмапился в нужную мне БД... А вот "стрём" создался в текущей области.
Как теперь наладить мапирование "стрёмного потока" в нужную мне БД?

----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
Cache for Windows (x86-32) 2009.1.3 (Build 704_0_9104) Mon Mar 8 2010 19:31:10 EST
...
Рейтинг: 0 / 0
12.01.2012, 10:19
    #37610480
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
krvsaА вот "стрём" создался в текущей области.
Т.е. не в области конечно. Он создался в основной БД, а не в той, куда мапился глобал этого класса...
...
Рейтинг: 0 / 0
12.01.2012, 10:29
    #37610497
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
Причём я был сильно удивлён, что всё "хранение в базе" сводится к простому копированию моих файлов в каталог stream с каким-то рандомным именем.
Я просто скопировал один такой файл, указав ему нужное расширение, и это оказался 1 в 1 мой файл.
...
Рейтинг: 0 / 0
12.01.2012, 10:34
    #37610509
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
Нужно настроить хранение для стримового поля, в нужный глобал и его маппировать

в настройках хранения, это StreamLocation
...
Рейтинг: 0 / 0
12.01.2012, 10:43
    #37610531
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
DAiMorНужно настроить хранение для стримового поля, в нужный глобал и его маппировать
Т.е. есть какой-то вариант таки направить это в глобал?
...
Рейтинг: 0 / 0
12.01.2012, 10:47
    #37610539
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
DAiMorв настройках хранения, это StreamLocation
Вот всё, что нашел в доке на "StreamLocation"...
авторproperty StreamLocation as %SysPath;
Directory where the streams associated with this database go.
By default (value=""), the location is in the subdirectory "stream", underneath the database directory, e.g. for a database located in c:\abc, the default would be c:\abc\stream. InterSystems recommends leaving this parameter as "".
Т.е. про собственно глобал ни слова... Можно только путь поменять. А это не то.
...
Рейтинг: 0 / 0
12.01.2012, 10:51
    #37610551
newbie'
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
krvsaDAiMorНужно настроить хранение для стримового поля, в нужный глобал и его маппировать
Т.е. есть какой-то вариант таки направить это в глобал?
есть же %GlobalBinaryStream, а %FileBinaryStream - это "интерфейс к внешним файлам".
...
Рейтинг: 0 / 0
12.01.2012, 10:51
    #37610552
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
Да и пример там только вот такой...

Код: vbnet
1.
Property Image As %FileBinaryStream(LOCATION = "C:/Images");



Про хранение в глобале что-то не найду...
...
Рейтинг: 0 / 0
12.01.2012, 10:51
    #37610554
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
newbie'есть же %GlobalBinaryStream
Ща спробану, спасибо.
...
Рейтинг: 0 / 0
12.01.2012, 10:59
    #37610571
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
newbie' , спасибо. Такой вот вариант самое то!

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
/// tmp
Class soi.data.tmp Extends %Persistent
{

/// test
Property test As %GlobalBinaryStream;

/// str
Property str As %String;

}



Появился новый глобал ^soi.data.tmpS, его и отмапировал в нужную мне БД.
...
Рейтинг: 0 / 0
12.01.2012, 11:47
    #37610689
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
krvsa ,

Потоки

В новых приложениях лучше использовать классы пакета %Stream .

PS: если данные потока хорошо пакуются, то можно использовать класс %Stream.GblBinCompress
...
Рейтинг: 0 / 0
12.01.2012, 13:50
    #37611005
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
servitВ новых приложениях лучше использовать классы пакета %Stream .
Спасибо, учту.

servitесли данные потока хорошо пакуются, то можно использовать класс %Stream.GblBinCompress
А как понять, какие "данные потока хорошо пакуются"?
...
Рейтинг: 0 / 0
12.01.2012, 13:52
    #37611008
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
У нас предположительно будут видео файлы, снятые вебкамерой... И картинки-сканы документов... Они "хорошо пакуются"?
Т.е. есть какие-либо критерии такой "хорошести"?
...
Рейтинг: 0 / 0
12.01.2012, 14:28
    #37611116
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
krvsaУ нас предположительно будут видео файлы, снятые вебкамерой... И картинки-сканы документов... Они "хорошо пакуются"?
Т.е. есть какие-либо критерии такой "хорошести"?

что видео, что картинки уже сжаты (кроме bmp), и их сжимать бесполезно
а сожмутся хорошо, например текстовые файлы
...
Рейтинг: 0 / 0
12.01.2012, 14:33
    #37611130
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
krvsaУ нас предположительно будут видео файлы, снятые вебкамерой...Есть avi, mpg, mp4...
krvsaИ картинки-сканы документов... Они "хорошо пакуются"?Есть bmp, jpeg, jpeg 2000, png, tiff...
Все они обладают разной степенью дальнейшего сжатия.
docx , например, хуже пакуется, чем doc , потому что уже запакован.
krvsaТ.е. есть какие-либо критерии такой "хорошести"?%Stream.GblBinCompress использует ZLIB (методы $System.Util.Compress/Decompress).
Возьмите Ваши файлы, сохраните в БД с/без сжатия и оцените размер полученных глобалов.
...
Рейтинг: 0 / 0
12.01.2012, 14:39
    #37611146
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
DAiMorа сожмутся хорошо, например текстовые файлы
Таких не предполагается пока...
...
Рейтинг: 0 / 0
12.01.2012, 14:42
    #37611152
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
servitЕсть avi, mpg, mp4...
Есть bmp, jpeg, jpeg 2000, png, tiff...
Х/з что там клиент будет делать... Там одно хранение предполагает 5 лет. А за это время много чего вообще поменяется...

servitВозьмите Ваши файлы, сохраните в БД с/без сжатия и оцените размер полученных глобалов.
Ну так-то оно понятно...
...
Рейтинг: 0 / 0
18.01.2012, 11:47
    #37619582
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
krvsa,

приветствую
у меня такая же проблема, можешь по подробнее расписать что еще мэпить нужно
было так:
Код: sql
1.
Property test As %FileBinaryStream;


стало так:
Код: sql
1.
Property test As %GlobalBinaryStream;


компильнул класс, сделал загрузку картинки
Пакет с классом и глобалы намэплины на одну БД, а стрим лег в папку "stream" другой БД

спасибо
...
Рейтинг: 0 / 0
18.01.2012, 14:57
    #37620182
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
Ymka2007 , так мне уже помогли и я отписался как все разрешилось 11890416 ... Но все равно спасибо.

Пока вроде ничего мапить не требуется... А там посмотрим.
...
Рейтинг: 0 / 0
18.01.2012, 15:00
    #37620196
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
Ymka2007у меня такая же проблема, можешь по подробнее расписать что еще мэпить нужно
Или у тебя такое как раз не получается? У меня-то получилось... Файлик пишется в глобал, глобал мапируется в нужную БД...
Что делал и как менял всё в этой темке показал... Ну и в темке про "Программное управление Каше"...
...
Рейтинг: 0 / 0
18.01.2012, 15:03
    #37620206
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
krvsaв темке про "Программное управление Каше"...
Вот она
http://www.sql.ru/forum/actualthread.aspx?tid=906230

Более ничего не дорабатывал... Всё сделал практически одной программулькой...

Код: vbnet
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.
#define fileToProperty(%name,%prp) s %file=##class(%Stream.FileBinary).%New(),%file.Filename=%name do %prp.CopyFrom(%file) k %file
#define propertyToFile(%cls,%id,%prp,%name) s %file=##class(%Stream.FileBinary).%New(),%file.Filename=%name do %file.CopyFromAndSave(##class(%cls).%OpenId(%id).%prp) k %file
#define propertiesToFile(%prp,%name) s %file=##class(%Stream.FileBinary).%New(),%file.Filename=%name do %file.CopyFromAndSave(%prp) k %file

load
	n
	s file="\\ksa\box\tmp\test"
	s oc=##class(soi.data.tmp).%OpenId(1)
	s file=file_"."_oc.str
	$$$propertiesToFile(oc.test,file)
	k oc
	q
save
	n
	s file="\\ksa\box\tmp\t.jpg"
	s val=$re(file)
	s val=$p(val,".")
	s val=$re(val)
	s oc=##class(soi.data.tmp).%New()
	s oc.str=val
	$$$fileToProperty(file,oc.test)
	d oc.%Save()
	k oc
	q
maping
	n
	s ns=$zu(5)
	s Namespace="vdo"
	s Name="soi.data.tmpS"
	s Properties("Database")="vdo_media"
	zn "%sys"
	s Status=##Class(Config.MapGlobals).Create(Namespace,Name,.Properties)
	zw Status
	zn ns
	q



Вот класс
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
/// tmp
Class soi.data.tmp Extends %Persistent
{

/// test
Property test As %GlobalBinaryStream;

/// str
Property str As %String;

}
...
Рейтинг: 0 / 0
18.01.2012, 15:38
    #37620323
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
я то думал, что у тебя файлы вне БД сохраняются ))
мне как раз нужно чтоб в папке стрим используемой БД все хранилось, без "доп настроек"
...
Рейтинг: 0 / 0
18.01.2012, 20:14
    #37620985
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
Ymka2007я то думал, что у тебя файлы вне БД сохраняются ))
Неее я как раз добивался обратного.

Ymka2007мне как раз нужно чтоб в папке стрим используемой БД все хранилось, без "доп настроек"
Ясно...
Для внешнего хранения, я так понял, только
krvsa
Код: vbnet
1.
Property Image As %FileBinaryStream(LOCATION = "C:/Images");
...
Рейтинг: 0 / 0
19.01.2012, 12:15
    #37621775
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
спасибо
...
Рейтинг: 0 / 0
19.01.2012, 17:37
    #37622809
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мапировать данные класса со свойствами %FileBinaryStream?
Ymka2007мне как раз нужно чтоб в папке стрим используемой БД все хранилось, без "доп настроек"
Насколько я помню, эта папка служит для временного хранения некоторых открытых потоков. Поэтому использовать ее для постоянного хранения не следует.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как мапировать данные класса со свойствами %FileBinaryStream? / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]