Hi Community!
Enjoy watching the new video on InterSystems Developers YouTube, recorded by @Joel Solon, InterSystems Senior Technical Trainer:
A database model is a type of data model that determines the logical structure of a database and fundamentally determines in which manner data can be stored, organized and manipulated. The most popular example of a database model is the relational model, which uses a table-based format.
Hi Community!
Enjoy watching the new video on InterSystems Developers YouTube, recorded by @Joel Solon, InterSystems Senior Technical Trainer:
In many projects I was faced with storing hierarchical data (tree) in classes.
By tree, I mean such data, where each node has a parent node — an object of the same class.
Many examples of such data can be given. For example, a catalog in the online store. Suppose that this online store sells books, in this case, the category tree might look like this:
The number in front of the name is the category ID.
For storage, you can create classes:
The MyApp.Category class is used to store the category tree and contains the property “Parent” - reference to the same class.
Hi all
Is there a data model for the Ensemble EnsLib_HL7 tables in the database? A client wants to run some SQL and would like some documentation about table relationships.
Thanks in advance
Ian
What would a sample DbContext look like and how would you register the DbContext in the Startup.cs ConfigureServices method?
Hi guys!
As you know there are two (at least) ways to get the stored value of the property of InterSystems IRIS class if you know the ID of an instance (or a record).
1. Get it by as a property of an instance with "Object access":
ClassMethod GetPropertyForID(stId As %Integer) As %String
{
set obj=..%OpenId(stId)
return obj.StringData
}
2. Get it as a value of a column of the record with "SQL access":
In the previous parts (1, 2) we talked about globals as trees. In this article, we will look at them as sparse arrays.
A sparse array - is a type of array where most values assume an identical value.
In practice, you will often see sparse arrays so huge that there is no point in occupying memory with identical elements. Therefore, it makes sense to organize sparse arrays in such a way that memory is not wasted on storing duplicate values.
In some programming languages, sparse arrays are part of the language - for example, in J, MATLAB. In other languages, there are special libraries that let you use them. For C++, those would be Eigen and the like.
Globals are good candidates for implementing sparse arrays for the following reasons:
Dear Colleagues and Friends,
is there any indication that the .NET object representation of Cache objects (i.e. InterSystems.Data.CacheClient.dll) complies with .NET Standard? I'm planning to extend our existing .NET client/server solution with a mobile option by Xamarin Forms and can't find any significant hints in the internet.
I'm just fooling around a bit and made some expreiments with a REST API and a generic object-to-JSON tier:
ClassMethod ObjectFromObject(o As
i class
I hope for any instructive comment.
Thanks and regards
Markus
Pieter Brueghel the Younger, Paying the Tax (The Tax Collector), 1640
In my previous article, we just skimmed the surface of objects. Let's continue our reconnaissance. Today's topic is a tough one. It's not quite BIG DATA, but it's still the data not easy to work with: we're talking about fairly large amounts of data. It won't all fit into RAM at once, and some of it won't even fit on the drive (not due to lack of space, but because there's a lot of junk). The name of our subject is FIAS DB: the Federal Information Address System database - the databases of addresses in Russia. The archive is 5.5 GB. And it's a compressed XML file. After extraction, it will be a full 53 GB (set aside 110 GB for extraction). And when you start to parse and convert it, that 110 GB won't be enough. There won't be enough RAM either.
First time post, also a new Cache developer, hence the <Beginner> tag.
If our data has Predefined terms in a dictionary, and a user can add terms on their own, can the terms exist in different tables?
Lets call the tables "Terms" and the user data in "UserTerms".
If a third class definition has a property of "Term" can it not be either Terms or UserTerms?
I'm leaning towards using a Subclass strategy where the pseudo "Parent" (forgive me) is Dictionary.Term and the child is along the lines of Dictionary.Term.User
Dictionary.Term.User can inherit from Dictionary.
Just wondering an Insight in the difference between these two indexes
IdKey / PrimaryKey
=================
Property Identifier As %Integer
Index Index1 on Identifier [Idkey]
Index Index2 on Identifier [PrimaryKey]
What's the difference?
1. If I don't have Index1 and only have Index2, then cache does still make its own id.
So how and why do I ever use the PrimaryKey. In Joins ??
Table1.Identifier = Table2.Identifier instead of Table1.Id = Table2.id ??
But I can still use Table1.Id = Table2.Id as cache still made one ID field
So where is PrimaryKey useful in cache?
Hi
Just curious to know about the pros and cons of Parent/Child Vs One/Many.
We do use a bit of both.
One big reason we use Parent child is we feel if we delete one global, it gets rid of all child data too and all parent child data is stored in one global. Much easier to manage.
Let's say I have a property as a variable value:
set propName="Country"Is there a method to determine, should I quote it to access the object, so would the correct code be:
write obj."Country"or just simple
write obj.Countryis enough?
Hi,
I would like to know if anyone has had some experience in building systems for multiple end-users.
To keep things simple, in a hypothetical example, say an Event Booking System, where a Venue could sign up to use such a system and define it's Venue, costs, calendars, etc.. and then invite their customers to book the Venue on different days/times.
If I wish to offer such a system to many
We have a case where a vendor can send us more information in the DICOM message rather than in the HL7 result message. In theory it should be possible to take a DICOM and convert it to HL7, stupid question is has anyone done it before? Does anyone have any good examples of a DTL they did to show me how to setup the message structures and translation?
Thanks
Scott Roth
The Ohio State University Wexner Medical Center
Hi, Community!
Please welcome a new session recording from Global Summit 2017:
Building Effective Analytic Data Models
MonCaché — MongoDB API implementation based on InterSystems Caché

The idea of the project is to implement basic MongoDB (v2.4.9) API features for searching, saving, updating and deleting documents in a way that will allow the use of InterSystems Caché instead of MongoDB without changing the code on the client side.
Perhaps, if we take an interface based on MongoDB and use InterSystems Caché for data storage, we may see a performance boost.

Have you noticed that what ever the model and data structure in databases we cannot escape from the fundamental principle of managing data allocation space with references, i.e. pointer based logic, memory addressing ? Isn’t this the fundamental mechanism of programming languages too ? The problem I see with all these modern NoSQL databases, especially graph databases is that they provide a higher level abstraction for the end developer but they hide and lock completely the access to the low level storage and retrieval mechanism including indexes.
Hi,
I would like to draw your attention on a recently published article, titled "A Quick Guide on How to Prevail in the Graph Database Arena", that has been posted also at LinkedIn Intersystems Caché has been referenced several times.
Beginning - see Part 1.
A structure, such as an ordered tree, has various special cases. Let's take a look at those that have practical value for working with globals.
Hi, Community!
Suppose I have class A with properties P1 and P2.
I want to introduce class B, which would have same records as Class A, but only one property - P2.
What is the easiest way to manage it assuming that I would like to use Class A to add records and be available for any operations to Users with Role A.
And I would like to introduce class B for Users with role B for read-only access. Preferably they shouldn't even be aware of Class A and P1 existence .
What is the easiest way to introduce it and manage it?
Use some proxy-classes? Property-level security?
Is the InterSystems Cache has SQL or Non-SQL concept?
Hi
I have an Ensemble Application with many classes and relationships between those classes.
I need a tool that can connect to Cache/Ensemble and create a visual ERD from the class definitions within a particular Cache Namespace
MS-Access is one option but it does not automatically create the relationship connectors between classes
Any suggestions
Nigel Salm
Several years ago everyone got mad about BigData – nobody knew when smallish data will become BIGDATA, but all knows that it’s trendy and the way to go. Time passed, BigData is not a buzz anymore (most of us missed the moment when Gartner has removed BigData term from their 2016 buzzword 2016 curve http://www.kdnuggets.com/2015/08/gartner-2015-hype-cycle-big-data-is-out-machine-learning-is-in.html), so it’s probably a good time to look back and realize what it is (what it was)…
Let’s start from the beginning: what is the moment when “not so big data” becomes BigData?
In the prior part of this series we have provided introduction to Google MapReduce approach, but still not covered their possible ObjectScript implementation. Which we will start to explain today.
I've been building up a REST services API, consisting of a dozen or so classes referenced from a Dispatch class, which has route mappings for the first piece of the URI. I'd like to have the Dispatch class be able to output all of the available Services, with some documentation. Is there something like a %Library resource that I could use to pull this information from each of the classes?
Thanks
Chris
I have been following the online Zen Quickstart Tutorial using the lastest release documentation. In addition to playing around with the styling and making a few minor functionality tweaks, I wanted to add an additional column that shows a count of the number of phone numbers for that Contact (as shown in the image below).

The idea here is that you can see what contacts have phone numbers without having to click on the "view phones" link. All I have done here is add a blank additional column to the %ZEN.Component.tablePane object
This post is the direct result of working with an InterSystems customer who came to me with the following problem:
SELECT COUNT(*) FROM MyCustomTableTakes 0.005 seconds, total 2300 rows. However:
SELECT * FROM MyCustomTableTook minutes. The reason for this is subtle and interesting enough for me to write a post about. This post is lengthy, but if you scroll to the bottom I'll write a quick summary, so if you've gotten this far and think you've already read enough, scroll to the end to get the main point. Check for the sentence in bold.
Process-private Globals can be used as a data global in storage definition. That way, each process can have its own objects for the class with ppg storage. For example lets define a pool, which can:
Here's the class:
/// Stores unique identifiers
Class Utils.Pool Extends %Persistent
{
Property Value As %String;
Index IDKEY On Value [ IdKey, PrimaryKey, Unique ];
Method %OnNew(Value As %String = "") As %Status [ Private, ServerOnly = 1 ]
{
Set ..Value = Value
Quit $$$OK
}
ClassMethod Add(Value As %String = "")
{
Quit:..%ExistsId(Value)
Set Obj = ..%New(Value)
Do Obj.%Save()
}
Storage Default
{
<Data name="PoolDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<DataLocation>^||Utils.PoolD</DataLocation>
<DefaultData>PoolDefaultData</DefaultData>
<IdLocation>^||Utils.PoolD</IdLocation>
<IndexLocation>^||Utils.PoolI</IndexLocation>
<StreamLocation>^||Utils.PoolS</StreamLocation>
<Type>%Library.CacheStorage</Type>
}
}