· Dec 7, 2020

Guide to configure IRIS for production environment


Do you have a guide or tutorial with recommendations to configure IRIS to a production environment? The better strategies, recommended disk, memory and processing settings, etc?

Product version: IRIS 2020.4
Discussion (5)3
Log in or sign up to continue

Hello Yuri,

I am sure your InterSystems sales team would be happy to have an environment configuration planning discussion with you.

Outside of that, take a look at the following documentation. I am also going to link a developer community article series that covers some topics and best practices for Caché that you can apply to IRIS as well.

Vertically Scaling InterSystems IRIS

Preparing to Install InterSystems IRIS


I have written about 20 Integration Productions over the last 10 years and have worked for and with InterSystems for nearly 30 years. The InterSystems documentation is very good however it takes a certain amount of experience to get the most out of the documentation.

What I would suggest is that you look in the SAMPLES namespace as there are a number of example productions and other features of Ensemble and IRIS.

If you are working in the Cache Studio then use the "Project" -> "Add Item" to add all of the examples into your workspace.

The second thing I would advise is that you take a look at Microsoft V S Code which has a Cache ObjectScript Extension as well as a few others such as a Lint extension, multiple connections and so on. The advantage of working with VS Code is that it is quite possible that you will be working with other technologies such as Web Technologies like Angular and Python. VS Code also integrates with GIT (Git For Windows, Tortoise)

I have to confess that I am definitely more at home in a Windows Environment than I am in Linux and I am waiting for a Hard Drive upgrade to my laptop in order to install and work with Containers and there is of course a lot of emphasis on Linux/Unix and Containers in everything you read in the documentation and of course in the product distribution kits but once you have your O/S in place, your Containers, Your Cloud Environment then the first thing you'll notice that once installed Cache, Ensemble and IRIS look and behave identically on all of these platforms and technologies. So anything I say about memory management or Interoperability Adapters or coding standards is true across all platforms.

You happen to have asked a question that I am very passionate about. From getting the most out of Cache Objectscript, Coding Standards, Designing your database Classes/Tables. How to get the most out of Cache Objects, Cache SQL and Cache Direct. How does InterSystems implement Object Orientation as well as Relational SQL without having to duplicate, replicate or manipulate the underlying data in order to provide a seamless integration between the two. How to access the database directly bypassing OO and SQL: Why would I want to do this? What are the benefits? what are the pitfalls?

Then there is the whole topic of designing great Integration Productions. There are many concepts to consider here:

1) How is data getting into your production. How to design and configure your inbound and outbound adapters.

1.1) How to transform data using the powerful string manipulation functions that are intrinsically at the heart of Cache.

2) How to create Request and Response Messages to send salient information from your Business Services to Business Processes and/or Business Operations (Pushing data out of the Production, interacting with external third party applications and/or databases), Interacting with .Net and Java.

3) Build your UI: What are your options? Cache Server Pages, ZEN, Bootstrap, Angular, Python?

4) Synchronous vs Asynchronous Calls

5) BPL: Pro's and Con's

6) Data Transformations (DTL's)

7) HL7 and FHIR (I am deeply involved in FHIR at the moment) and other standards DICOM, LDAP, CDA, CCDA, HTTP, SOAP/Web Services, Java, .Net, TCP, ASTM, JSON, XML and the 43 other variations thereof

8) Reusability of code

9) Debug Logging

10) House Keeping

11) Alerting, What does IRIS offer in the way of creating Alerts and monitoring of those Alerts, assigning alert issues to specific Users. Alternatively making use of a custom Alerting system (I have one of those which I am willing to share)

12) How to configure your servers. Disk allocation, memory allocation, process memory

13) Understanding how IRIS manages data: Retrieving data from disk, managing that data in memory, what happens when data is modified in memory? Do other users see that modified data in memory? When that page of data in memory needs to be written back to the disk system: how does that happen? What happens if the server crashes in the middle of that physical update to disk? How does it recover

14) Why is IRIS so fast? How are Globals (The underlying physical storage structures that are projects through Object Classes or Relational Tables) structured

14.1) Indexing: Conventional Indexing, Bitmap and BitSlice Indexing, iFind Indexing. What are the differences? When to use them, the power of iFind Indexing on unstructured but important data such as Names and Addresses

15) How do I optimise the I/O of data from your disk system. Databases, Journalling, Write Image Journaling, Archive databases

16) Security: Auditing, Access Control, Encryption

17) InterSystems Learning Services

18) The Developer Community

19) InterSystems Open Exchange

So, as you may have gathered I could write anything from 1 page to an entire chapter based on my personal experience on every one of these topics so let me know which topics are most critical to you and I will do my best to answer each of them - documentation and in some cases code examples.

One of the tricks is absolutely the issue of standards, naming conventions, templates for classes, methods, property definitions, foreign keys, the difference between how IRIS manages Objects vs. Relational Tables. What are the implications when you want to write functions that can be called by both paradigms. For example, using the %OnNew, %OnBeforSave, %OnAfterSave vs SQL Insert, Update and Delete Triggers.

Methods and Class Queries projected as Stored procedures that can be invoked by external relational environments yet behave as Object functions within IRIS

What would help is if you could give me some idea about your background? What technologies have you worked with before you finally reached "The One True Database and Development Technology for Dedicated, Enthusiastic and Passionate System Architects and Developers" laugh 

Is your experience primarily in the Relational world of Microsoft and Oracle, Java, Web Development and so on. Knowing this will help me draw parallels between what you already know and how best to bridge the gap into Ensemble and IRIS.?

Looking forward to hearing from you

Nigel Salm

I wrote my first reply in rather a rush. What would help me is to understand how you came to the world of InterSystems and where it fits in your future development plans.

What I can say is that it is one of the most consistent environments in which to develop applications. Once you have understood the basics of the Language, the concepts of Classes and Tables, the common approach to the multitude of adapters supported for Interoperability you will find that no matter what you want to do within the technology you will find that everything is built upon a very simple yet powerful paradigm. Keep It Simple, There is no fluff in IRIS. There are no masses of libraries that have to be included and compiled into each component of you application. Object Orientation (of which I am a dedicated advocate) is so powerful that once you have written some core classes and methods and you wrapper them in such a way that they can be seen as Java Methods or Relational Stored Procedures just be adding a couple of key words and possibly running them through a wizard that will create the project wrapper to expose them as such to the outside world you will come to realise that the symbiosis of data and logic is unlike anything you will have experienced in other technologies.

If you give me a relatively experienced developer with a passion for developing software I can train that developer within 2 weeks to become a IRIS developer capable of creating classes (and implicitly tables), teach them when to use SQL rather than OO, create a basic Production that consumes data from an external source, manipulate and transform that data and either store it within IRIS or send it on to some other 3rd party application. Give me another 2 weeks spread over 2 months and I will help that developer tackle specific issues relating to any project that you start developing in IRIS. So give it some thought and let me know how best I can get you up and running in these probably the most innovative and enjoyable technologies on the market today.

I think Vic's links are a good place to start. Every application is such a snowflake that it is very hard to make blanket recommendations. The community link will give you a good idea of how system resources are used and what to monitor to be aware of whether your app is near limits of has resources tp spare that could be rightsized. The documentation links are good for Caché / IRIS general guidelines as well.