Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Cache – мнения есть?   Найти похожие ветки 

 
AndB ©   (2004-10-14 10:20) [0]

Из живущих здесь кто-нибудь игрался с Cache"? Поделитесь впечатлениями, плз. Судя по "обложке" - интересно.
(Для желающих поиграться - http://www.intersystems.ru/ :)


 
Mystic ©   (2004-10-14 11:14) [1]

Я ограничился только чтением документации и написанием совсем коротеньких примеров. Отношение вполне хорошое. И отношение службы тех. поддержки тоже. Превый проект они предлагают делать совместно :)

На серьезных проектах испытать не было возможности.


 
vecna ©   (2004-10-14 12:47) [2]

Кстати, да, эти ребята позиционируют свою СУБД очень не слабо, уверяя что она гораздо круче, например, oracla (где-то видел весьма сомнительные тесты быстродействия), во что мне почти не вериться, но тем не менее...

хочется мнения от людей испытавших сабж в "боевых" условиях.


 
Cobalt ©   (2004-10-14 14:16) [3]

Я работаю с ней почти 2 года.
Впечатление хорошее.
2 AndB ©  
Как вы собираетесь с ней работать - она ведь позиционируется как объектно-ориентированная.
2 Mystic - и ты - как работал с ней?


 
Awex   (2004-10-14 14:41) [4]

Глобалы решают...


 
AndB ©   (2004-10-14 15:38) [5]

2 Cobalt © > Как вы собираетесь с ней работать - она ведь позиционируется как объектно-ориентированная.
так ведь именно это и привлекает. Проф.область относится к разряду трудно формализуемых и мы уже приморились раскладывать природу недр в классическую реляционную структуру.
Лишь второй день примеряясь к Cache" я не могу сказать как буду(-ли?) ее использовать :) Но выглядит очЧень привлекательно.
Cobalt, если Вы "работаете с ней почти 2 года", то вопрос "Как .." хочется переадресовать Вам :)
Как Вы работаете?


 
Cobalt ©   (2004-10-14 15:53) [6]

Мы работаем изнутри, то есть всё (подавляющая часть работы (бизнес-логика, в частности)) делается на сервере.
Там есть программные модули. В них - функции/процедуры, которые и выполняют всё.
А ввод и вывод данных - на клиенте.
Очень удобно. Гибкий язык.
Можно как в терминале видеть (мы не используем), так и веб-формы (Cache Server Pages).
Также можно использовать и виндовые формы/
У нас есть целая Дельфи-подобная среда разработки - SMWrap Studio см. http://www.makova.ru . Редактор форм, классов, рутин (модули), глобалей.
Вот, рекомендую


 
AndB ©   (2004-10-14 16:35) [7]

2 Cobalt © Спасибо, и за ссылку тоже.


 
Layner ©   (2004-10-14 16:55) [8]

Я работаю с ней почти 2 года.
Впечатление хорошее.


Мне особенно понравилась нижняя строчка :)

Мы работаем изнутри, то есть всё (подавляющая часть работы (бизнес-логика, в частности)) делается на сервере.
Там есть программные модули. В них - функции/процедуры, которые и выполняют всё.
А ввод и вывод данных - на клиенте.
Очень удобно. Гибкий язык.


А у меня тоже самое на MS SQL Server вертится :) И все тоже очень очень удобно. Вот ведь как..


 
Cobalt ©   (2004-10-14 18:00) [9]

На самом деле мы планируем переходить с глобалей на классы - для повышения удобства и скорости разработки.
С классами удобно - можно будет использовать все хорошести наследования.


 
Mystic ©   (2004-10-15 14:51) [10]

и ты - как работал с ней?

Через Delphi + COM.

А у меня тоже самое на MS SQL Server вертится :) И все тоже очень очень удобно. Вот ведь как..

Имхо, для реализации большого объема бизнес-логики это не самый лучший вариант...


 
vuk ©   (2004-10-15 15:03) [11]

to Mystic ©   (15.10.04 14:51) [10]:
>Имхо, для реализации большого объема бизнес-логики это не самый
>лучший вариант...
Почему этот не оптимальный? Какой является оптимальным?


 
iZEN ©   (2004-10-15 15:08) [12]

/**vuk ©   (15.10.04 15:03) [11].
Почему этот не оптимальный? Какой является оптимальным?
*/
Я как-то говорил в одной из веток, что бизнес-логика лучше определяется не хранимыми процедурами и триггерами (как у Вас), а более приближенными к моделям бизнес-правил сущностями - классами (и объектами-принципалами, если на то пошло).


 
vuk ©   (2004-10-15 15:20) [13]

to iZEN ©   (15.10.04 15:08) [12]:
Тогда еще раз и я повторюсь. Бизнес логика при нормальном проектировании и некоторых навыках обычно достаточно легко раскладывается в реляционные схемы. Что же касается удобства манипулирования данными, то здесь нужно помнить еще и о том, что удобство, жалетельно, не должно приводить к снижению производительности. Насколько эти вещи это сочетаются в Cache? Я немного интересовался этой БД, литературу читал, но до серьезных тестов руки как-то не дошли...
Что же касается самого подхода, используемого в Cache, то он мне кажется более правильным, чем построение серверов приложений.


 
iZEN ©   (2004-10-15 16:24) [14]

/**vuk ©   (15.10.04 15:20) [13]
to iZEN ©   (15.10.04 15:08) [12]:
Тогда еще раз и я повторюсь. Бизнес логика при нормальном проектировании и некоторых навыках обычно достаточно легко раскладывается в реляционные схемы.
*/
Да, да, да. Иначе бы не использовали мощные реляционные СУБД совместно с микроскопическими самоделками - программулинами-затычками "узких" мест, но они - не главное, главное - "у нас есть РСУБД!!" ;)
/*
Что же касается удобства манипулирования данными, то здесь нужно помнить еще и о том, что удобство, жалетельно, не должно приводить к снижению производительности. Насколько эти вещи это сочетаются в Cache? Я немного интересовался этой БД, литературу читал, но до серьезных тестов руки как-то не дошли...
*/
Эти вещи хорошо сочетаются до тех пор пока не начнёшь использовать различные мосты для получения DataSet-ов (по типу "универсала" ADO). Прямой коннескт увеличивает скорость запроса-ответа не то что в разы, в тысячи-десятки тысяч раз!
(Рядом сидит Cache-девелопер, показывает разные фишки, которые нереальны для обычной РСУБД)

/*
Что же касается самого подхода, используемого в Cache, то он мне кажется более правильным, чем построение серверов приложений.
*/
Сервер приложений - это объектная прокладка, работающая интеллектуальным кэшем-мостом.
Cache - это ООСУБД, которая исключает прикладное (на уровне прикладного кода) преобразование данных из реляционного представления в объектное, там данные хранятся в формате, близком к XML (собственная оптимизированная разметка, но "отражение", если надо, будет один-в-один без потерь).


 
Danilka ©   (2004-10-15 16:32) [15]


> (Рядом сидит Cache-девелопер, показывает разные фишки, которые
> нереальны для обычной РСУБД)

А можно примерчик? Просто интересно, что такого нереально сделать на РСУБД, и реально на Кэше.


 
vuk ©   (2004-10-15 16:40) [16]

to iZEN ©   (15.10.04 16:24) [14]:

>Прямой коннескт увеличивает скорость запроса-ответа не то что в
>разы, в тысячи-десятки тысяч раз!
Вопрос тут в том, насколько эффективна работа с большими объемами дынных. А скорость ответа - не самое главное.

>показывает разные фишки, которые нереальны для обычной РСУБД
Разные фишки, это, конечно, здорово. Акробатика, так сказать. Но сами по себе, без практического применения, фишки никому не нужны.

>Cache - это ООСУБД, которая исключает <...>
Именно поэтому мне подход кажется более правильным. Данные хранятся и обрабатываются в одном месте. Получаем что-то типа сервера приложений, который сросся с самой базой данных. Точно также разработка с использованием логики, основанной на SP эффективнее логики, отделенной от данных и размещенной на клиенте или где-то еще.


 
Mystic ©   (2004-10-15 18:18) [17]

Почему этот не оптимальный? Какой является оптимальным?

В случае MS SQL сложную логику, лучше, имхо выделять отдельным слоем. Например, если у меня в хранимых сущностях имеется наследование, которое накрывается виртуальными функциями на языках высокого уровня, то в MS SQL это плодит многочисленные


CASE
 WHEN OBJECT_CLASS_ID = 400002345 THEN EXEC PROCESS_STUDENT(..)
 WHEN OBJECT_CLASS_ID = 400005678 THEN EXEC PROCESS_PROGRAMMER(..)
 WHEN OBJECT_CLASS_ID = 400001784 THEN EXEC PROCESS_LEAD_PROGRAMMER(..)
 WHEN OBJECT_CLASS_ID = 400009156 THEN EXEC PROCESS_MANAGER(..)
END


Иногда с более запутаной логикой...


 
vuk ©   (2004-10-15 18:31) [18]

to Mystic ©   (15.10.04 18:18) [17]:
>то в MS SQL это плодит многочисленные
>CASE <...>
Чего-чего? В T-SQL у case другой смысл, а не тот который Вы написали. А exec можно подсовывать переменную строкового типа в качестве имени процедуры. Так что задачу можно решить проще.


 
Mystic ©   (2004-10-15 19:22) [19]

Скажем так, у меня есть ID персоны (таблица TBL_PERSON). Но, в зависимости от того, является ли персона программистом, ведущим программистом, менеджером, и т. д. работают разные механизмы начисления з/п или еще чего... При этом данные могут браться их других таблиц, таких так TBL_PROGRAMMER, TBL_MANAGER, ...


 
vuk ©   (2004-10-15 20:01) [20]

Как что-то похожее делается у нас. Сразу скажу, никаких Persistent Object Framework у нас нет.

Распишу ту же схему данных но чуть иначе. Поля данных - по минимуму.

table PersonType(pnt_id int, pnt_Name varchar(50))
table Person(pn_id int, pn_Name varchar(100))


Предполагаем, что процедура, из которой происходит вызов конкретных процедур
для каждого типа персоны называется spPN_DoSometing, а конкретные процедуры
spPN_DoSometing<ID>, где <ID> - идентификатор типа персоны.


Тогда, если в PersonType содержатся данные
pnt_id  pnt_Name
1   Программист
2   Ведущий программист
3   Менеджер


Следующие процедуры будут выполняться для разных типов персон:
spPN_DoSometing1 - для программиста
spPN_DoSometing2 - для ведущего программиста
spPN_DoSometing2 - для менеджера

В принципе, вместо pnt_id можно завести в PersonType что-то типа поля
ProcPostfix и добавлять его, а не pnt_id.

Приблизительный код головной процедуры:


create procedure spPN_DoSometing
@pn_id int, @Param int
as
begin
declare @result int, @pnt_id int, @ProcName sysname

select
 @pnt_id = pnt_id
from
 Person
where
 pn_id = @pn_id
 
if @pnt_id is null
begin
 raiserror("spPN_DoSometing: Invalid person", 16, 2)
 return -1
end

select @ProcName = "DoSomething" + convert(varchar, @pnt_id)
if not exists(select 1 from sysobjects where name = @ProcName and xtype = "P")
begin
 raiserror("spPN_DoSometing: Internal error - Unsupported operation type", 16, 2)
 return -1
end

select @ProcName = "dbo." + @ProcName
 
exec @result = @ProcName @pn_id, @Param

return @result

end


Этот код работает для любого существующего сейчас или в будущем типа персоны.


 
Sergey_Masloff   (2004-10-15 20:04) [21]

Mystic ©   (15.10.04 19:22) [19]
Все это элементарно реализуемо и в Oracle и в MS SQL и вообще в любой РСУБД c поддержкой ХП.


 
Sergey_Masloff   (2004-10-15 20:06) [22]

vuk ©   (15.10.04 15:20) [13]
>Бизнес логика при нормальном проектировании и некоторых навыках обычно достаточно легко раскладывается в реляционные схемы.
Именно

>Что же касается удобства манипулирования данными, то здесь >нужно помнить еще и о том, что удобство, жалетельно, не должно >приводить к снижению производительности.
Подписываюсь под каждым словом. Кстати никаких особых неудобств манипуляции данными на сервере не наблюдаю.


 
vuk ©   (2004-10-15 20:08) [23]

Баг! Баг! :o)
>@ProcName = "DoSomething"
должно быть конечно же: @ProcName = "spPN_DoSometing"


 
vuk ©   (2004-10-15 20:14) [24]

Блин, да что ж такое! :o))))
>table Person(pn_id int, pn_Name varchar(100))
table Person(pn_id int, pnt_id int, pn_Name varchar(100))


 
Cobalt ©   (2004-10-15 23:21) [25]

2 iZEN ©   (15.10.04 16:24) [14]
> там данные хранятся в формате, близком к XML
Ну, как там они хранятся - не знаю, но вот формат экспорта-импорта - да, XML.


 
vecna ©   (2004-10-16 01:01) [26]

Всем кто работает с Cache, расскажите плз как организованна согласованость данных, как организована работа блокировок, насколько Cache дружит с XML и внешними процедурами


 
Cobalt ©   (2004-10-16 02:45) [27]

2 vecna ©   (16.10.04 01:01) [26]
> как организованна согласованость данных
Что ты имеешь в виду?

>как организована работа блокировок
Ставишь блокировку на запись - и перед работой с ней проверяешь - заблокирована ли запись (с timeout). Как только рабочий процесс (который поставил блокировку), умрёт - блокировка снимается.
Блокировки только для себя - не проверишь - никто, кроме тебя не ругнётся, что заблокирована запись.

>насколько Cache дружит с XML
This document describes how Cach&#233; works with XML.
Cach&#233; brings the power of objects to XML processing: you are not constrained to using XML as simple text files (or relational BLOBs) nor are you forced to wedge complex XML documents into relational rows and columns. Instead, you can use objects as a direct representation of XML documents and vice versa. As Cach&#233; includes a native object database, you can use such objects directly with a database; you do not need additional complex middle-ware or conversion technologies.
You can use XML with Cach&#233; in a variety of ways, including:
As a standard format in messaging applications. This includes industry-standard protocols as well as more home-grown solutions.
As a standard format for data exchange between applications and users.
As a standard representation for external data storage. This may include traditional database records or it may include more complex content such as documentation.
In addition, Cach&#233; uses its built-in XML capabilities to support SOAP and Web Services. For more information refer to Using SOAP and Web Services with Cach&#233;.
Cach&#233; XML Features
Cach&#233; offers the following XML-related features:
Objects can automatically “project” themselves as XML documents. This includes projecting object properties as XML elements and attributes as well as supporting nested elements (represented as object collections, embedded objects, or object relationships). The projected XML can be served as standard files or as on-line content (such as in response to HTTP requests). The object projection can also used to automatically generate an XML DTD or Schema (the standard XML methods for defining the contents of an XML document).
XML documents can be automatically transformed into an equivalent object representation. You can use the resulting objects to perform business logic or for storage in the Cach&#233; object database. Incoming XML can be read from files, streams, or from incoming HTTP requests. Cach&#233; can validate any incoming XML using industry-standard XML DTD or Schema validation.
For special applications, you can customize Cach&#233;"s XML support in a number of ways. This includes an easy way to create custom XML server code as well as the ability to create custom XML import mechanisms (using Cach&#233;"s SAX interface).
Cach&#233; includes, within Studio, an XML Schema Wizard that automatically generates class definitions from XML schemas. For more information, refer to the section on XML Schemas.
Cach&#233; XML Architecture
Cach&#233; includes the following components for working with XML:
The Cach&#233; SAX parser—a builit-in SAX XML validating parser using the standard Xerces library. SAX is a parsing engine that provides complete XML validation and document parsing. Cach&#233; SAX communicates with a Cach&#233; process using a high-performance, in-process call-in mechanism. Using Cach&#233; SAX you can process XML document using either Cach&#233;"s built-in XML support (q.v.) or by providing your own custom SAX interface classes within Cach&#233;.
The Cach&#233; XML library—a set of Cach&#233; classes for working with XML. These classes include %XML.Adaptor , which gives any class the ability to automatically project (serialize) its object instances to XML and vice versa; %XML.Reader which provides the ability to read XML documents and automatically convert them into object instances; and %XML.TextReader which provides a way to read generic XML documents without defining an object mapping.
These components are described in more detail later in this document.


> и внешними процедурами
UDF, в смысле? Не знаю, не пользовался со стороны плоских таблиц.
Вот, есть вроде что-то такое:
Issuing Operating System Commands from Cach&#233;
Calling External Applications with $ZF
Building Callout Modules as Shared Libraries
Referencing a User-Defined Callout Module
Sample Cach&#233; Callout DLL Build Procedures
Reading and Writing to Devices Opened in UNIX


 
vecna ©   (2004-10-16 03:02) [28]

2Cobalt
> Что ты имеешь в виду?
Имею ввиду согласованность на чтение, уровни изолированности транзакций, одновременный доступ, блокиование чтением например записи


 
vecna ©   (2004-10-16 03:08) [29]

> и перед работой с ней проверяешь - заблокирована ли запись
т.е. как в оракле? нет списка блокировок => а чтобы узнать, заблокирована ли строка, нужно попытаться ее заблокиовать самому ?

и в предыдущий пост про согласованность: возможно ли в Cache "грязное" чтение.

вообще странно, очень мало документации про эту СУБД


 
SPeller ©   (2004-10-16 07:26) [30]

У нас на работе проект средних таких размеров работает с этой СУБД. Лично у меня впечатление хорошее. Если учесть что я с другими СУБД не работал, то может быть кому-то мое мне покажется не достойным внимания, но я всё-же скажу пару слов. СУБД действительно объектно-ориентированная. Все таблицы - это классы, с наследованием, свойствами, методами и т.п. Возможность писать скрипты на языках Cache", васик и ява. Достаточно удобно всё сделано. Багофича есть одна - нет блокировки транзакций. Её можно написать самому. Блокировки различные тоже страдают, но это всё можно подшаманить вручную. Для работы с cache" мы использовали самостоятельно написанные COM обёртки (DataSet, Query и т.п.). Очень удобно. Если всё-же решите работать с этой СУБД, то свяжитесь со мной, попробуете договориться о покупке (в пределах разумного, конечно) этих компонент (исходники у нас, но принадлежат они заказчику проекта). Есть, конечно, подводные камни, но я думаю что где их нет?


 
SPeller ©   (2004-10-16 07:29) [31]

По части документации - посмотрите на dimas.ru, там вроде что-то есть.


 
Cobalt ©   (2004-10-16 11:12) [32]

> согласованность на чтение, уровни изолированности транзакций, одновременный доступ, блокиование чтением например записи
Изолированности транзакций нету.
Там механизм "оптимистической транзакции" - т.е. всё, что записал - видно сразу. А если что - делаешь Rollback. Единственная проблема - если во вложенной транзакции делаешь Rollback - то выносит всё, что было записано. по крайней мере, в 5-ке так есть. Вроде как обещали исправить это...

>одновременный доступ, блокиование чтением например записи
На пользовательском уровне блокировками реализуется. Видимо, этим достигается быстрота работы.

>т.е. как в оракле? нет списка блокировок => а чтобы узнать, заблокирована ли строка, нужно попытаться ее заблокиовать самому ?
Да.


 
vecna ©   (2004-10-16 11:21) [33]

2Cobalt & SPeller

спасибо



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.033 c
6-1093870110
DsA
2004-08-30 16:48
2004.11.07
Как в Delphi узнать скорость соединения (Dial-Up, LAN)?


14-1098027858
olookin
2004-10-17 19:44
2004.11.07
И еще... Вероятно, я просто отстал от жизни, но....


1-1098197457
Anton_G
2004-10-19 18:50
2004.11.07
глиф с альфа-каналом (полупрозрачность)


9-1089914581
Ertong
2004-07-15 22:03
2004.11.07
DirectInput и размер EXE


4-1096455272
Koala
2004-09-29 14:54
2004.11.07
Серийный № HDD





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский