Search

Clear filter
Article
Yuri Marx · Feb 4, 2021

DataOps with InterSystems IRIS

Gartner defined DataOps as: "A collaborative data management practice focused on improving the communication, integration and automation of data flows between data managers and data consumers across an organization. The goal of DataOps is to deliver value faster by creating predictable delivery and change management of data, data models and related artifacts. DataOps uses technology to automate the design, deployment and management of data delivery with appropriate levels of governance, and it uses metadata to improve the usability and value of data in a dynamic environment." DataOps was first introduced by Lenny Liebmann, Contributing Editor, InformationWeek, in a blog post on the IBM Big Data & Analytics Hub titled "3 reasons why DataOps is essential for big data success" on June 19, 2014. The term DataOps was later popularized by Andy Palmer at Tamr. DataOps is a moniker for "Data Operations." 2017 was a significant year for DataOps with significant ecosystem development, analyst coverage, increased keyword searches, surveys, publications, and open source projects. Gartner named DataOps on the Hype Cycle for Data Management in 2018. (source: https://en.wikipedia.org/wiki/DataOps) The DataOps manifesto established the following DataOps principles: (https://www.dataopsmanifesto.org/dataops-manifesto.html) Continually satisfy your customer: Our highest priority is to satisfy the customer through the early and continuous delivery of valuable analytic insights from a couple of minutes to weeks. Value working analytics: We believe the primary measure of data analytics performance is the degree to which insightful analytics are delivered, incorporating accurate data, atop robust frameworks and systems. Embrace change: We welcome evolving customer needs, and in fact, we embrace them to generate competitive advantage. We believe that the most efficient, effective, and agile method of communication with customers is face-to-face conversation. It's a team sport: Analytic teams will always have a variety of roles, skills, favorite tools, and titles. A diversity of backgrounds and opinions increases innovation and productivity. Daily interactions: Customers, analytic teams, and operations must work together daily throughout the project. Self-organize: We believe that the best analytic insight, algorithms, architectures, requirements, and designs emerge from self-organizing teams. Reduce heroism: As the pace and breadth of need for analytic insights ever increases, we believe analytic teams should strive to reduce heroism and create sustainable and scalable data analytic teams and processes. Reflect: Analytic teams should fine-tune their operational performance by self-reflecting, at regular intervals, on feedback provided by their customers, themselves, and operational statistics. Analytics is code: Analytic teams use a variety of individual tools to access, integrate, model, and visualize data. Fundamentally, each of these tools generates code and configuration which describes the actions taken upon data to deliver insight. Orchestrate: The beginning-to-end orchestration of data, tools, code, environments, and the analytic teams work is a key driver of analytic success. Make it reproducible: Reproducible results are required and therefore we version everything: data, low-level hardware and software configurations, and the code and configuration specific to each tool in the toolchain. Disposable environments: We believe it is important to minimize the cost for analytic team members to experiment by giving them easy to create, isolated, safe, and disposable technical environments that reflect their production environment. Simplicity: We believe that continuous attention to technical excellence and good design enhances agility; likewise simplicity--the art of maximizing the amount of work not done--is essential. Analytics is manufacturing: Analytic pipelines are analogous to lean manufacturing lines. We believe a fundamental concept of DataOps is a focus on process-thinking aimed at achieving continuous efficiencies in the manufacture of analytic insight. Quality is paramount: Analytic pipelines should be built with a foundation capable of automated detection of abnormalities (jidoka) and security issues in code, configuration, and data, and should provide continuous feedback to operators for error avoidance (poka yoke). Monitor quality and performance: Our goal is to have performance, security and quality measures that are monitored continuously to detect unexpected variation and generate operational statistics. Reuse: We believe a foundational aspect of analytic insight manufacturing efficiency is to avoid the repetition of previous work by the individual or team. Improve cycle times: We should strive to minimize the time and effort to turn a customer need into an analytic idea, create it in development, release it as a repeatable production process, and finally refactor and reuse that product. When you analyze these principles, it is possible see some points where InterSystems IRIS can help: Continually satisfy your customer: you can create new short integration productions, orchestrations, IRIS cubes, reports, BI visualizations and ML models by sprints or iterations. Value working analytics: IRIS help you to deliver data with quality (using productions, adapters and class methods in the persistent classes) and enable you to do data exploration into IRIS BI pivot tables (analysis designer) and into IRIS NLP (text analysis). Self-organize: IRIS simplify the self organization, because with an unifield data platform, you collect, process, analyze and publish insights, with one tool. Reflect: This User Portal you can interact with users and collect feedback to improve delivered products. Analytics is code: into IRIS data model, cubes, dashboards are source code, with version control and governance. Orchestrate: IRIS is a data platform thats orchestrate data ingestion, enrichment, analytical work, data visualization and ML over data, in a single tool, IRIS. Make it reproducible: IRIS embrance docker, kubernetes (IKO) and devops to reproduce the results. Disposable environments: IRIS supports create docker disposable environments to integration, data models, BI cubes and visualizations. Simplicity: IRIS data cube creation is very simple and eliminate the creation of ETL scripts, the creation of analysis, cubes, dashboards are visual, web and possible to be done by the users, not only developer team. And IntegratedML allows create ML to common scenarios without source code development. Monitor quality and performance: IRIS uses SAM to monitor performance and have a Web Management Portal. Reuse: in IRIS the DataOps artifacts are classes and classes are extensible and reusable by default. Improve cycle times: the users can create dashboards, analysis, reports, publish and share your work at self-service. The ODSC (https://opendatascience.com/maximize-upstream-dataops-efficiency-through-ai-and-ml-to-accelerate-analytics/) indicate the following DataOps strategy: The InterSystems IRIS helps in the above points, see: Self-service provisioning: users can create and publish cubes and dashboards. Share, tag, annotate: User portal can be used to share dashboards, the IRIS Analytical Web Portal allows user create, document, organize into folders and tag your work. Enrichement: BPL can be used to enrich data. Preparation: BPL, DTL, Adapters and ObjectScript logic can help with data preparation. Data marketplace: data assets can be published to REST API and monetized with IRIS API Manager. Data Catalog: data in IRIS is organized into classes, theses classes are stored into the class catalog system (%Dictonary) Profile & Classify: can be created groups, folders to analytical artifacts in the User Portal and Admin Portal. Quality: IRIS has utility classes to generate sample data and do unit tests. Lineage: into IRIS all data assets are connected, from data model you build cubes, from cubes you build dashboards and all data assets can be controlled by data curators (IRIS permission system) Mastering: Admin Portal allows you master all aspects into analytical projects. DB Data, File Data, SaaS API, streams: IRIS is multimodel and supports persistence and analysis into data and text (NLP). Supports SaaS API using IRIS API Manager and works with Streams using Integration Adapters and PEX (with kafka). Applications, BI Tools, Analytics Sandboxes: with IRIS you can create DataOps apps with your preferred language (Java, Python, .NET, Node.js, ObjectScript). IRIS is a BI tool, but you can use connectors with Power BI or MDX bridge and IRIS is sandbox to analytics, in a single tool. See my summary mapping IRIS and DataOps: Great article, thank you! I hadn't seen the DataOps concept before but it makes a lot of sense.
Discussion
Eduard Lebedyuk · Apr 2, 2021

InterSystems IRIS multistage builds

Images for other languages are often build using multistage build process. What about InterSystems IRIS? Consider this Dockerfile: FROM irishealth-community:2020.4.0.524.0 AS builder # Load code into USER and compile # Adjust settings, etc. FROM irishealth-community:2020.4.0.524.0 # replace in standard kit with what we modified in first stage COPY --from=builder /usr/irissys/iris.cpf /usr/irissys/. COPY --from=builder /usr/irissys/mgr/IRIS.DAT /usr/irissys/mgr/. COPY --from=builder /usr/irissys/mgr/user/IRIS.DAT /usr/irissys/mgr/user/. The advantage of this approach is the image size.The disadvantage is that on a final stage developer must know/remember all the modified places in the builder image.But otherwise is this approach OK for InterSystems IRIS?Have anyone tried to build IRIS images this way? We build IRIS with ZPM this way, and the reason was to shrink the final size But the best you achieve if you will not change anything in the system database, which is quite big, and it makes no sense in the end. Thank you! Why do you map %ZLANGC00/%ZLANGF00 to %ALL? They are available everywhere by default. The reason was to place them in the particular database, out of the system database. You may use this at init time https://openexchange.intersystems.com/package/helper-for-objectscript-language-extensions to add your ZPM command and function. It does a unique insert of the label For a simple case (add a couple of classes to the USER namespace) - what would be space savings here? Interesting question! Here are my findings for `store/intersystems/irishealth-community:2020.4.0.524.0` and a simple app in the `USER` namespace. | | Uncompressed (Mb) | Compressed (Mb) | |--------------------|--------------------|-----------------| | IRIS | 3 323 | 897 | | IRIS Squashed | 3 293 | 893 | | App | 8 436 | 1 953 | | App MSB | 3 526 | 937 | | App Squashed | 3 576 | 931 | | App MSB + Squashed | 3 363 | 904 | Notes: - MSB means [Multi Stage Build](https://docs.docker.com/develop/develop-images/multistage-build/) - Squashed means that an image was built with a [--squash option](https://github.com/docker/docker-ce/blob/master/components/cli/docs/reference/commandline/build.md#squash-an-images-layers---squash-experimental) - Uncompressed size is calculated via `docker inspect -f "{{ .Size }}" $image` - Compressed size is calculated via `(docker manifest inspect $image | ConvertFrom-Json).layers | Measure-Object -Property size -Sum` - More info on calculating image sizes is available [here](https://gist.github.com/MichaelSimons/fb588539dcefd9b5fdf45ba04c302db6) **Conclusion**: either MSB or Squashed work fine, but just MSB would be better for storage as it can have shared layers (squash always produces one unique layer). Squashed is easier to implement. Super benchmark, it's very interesting.Personally, I prefer the squash method because it is easy to implement (no change in the dockefile). I won't recommend using squashing, as it makes caching image layers useless. Have a look at this nice tool, which may help to discover why your final image is so big. btw, one thing I noticed working on macOS, is that the final image much bigger than expected, while the same Dockerfile on Linux, produces an image of a reasonable size. You might want to add /usr/irissys/csp/bin/CSP.ini to the list of files to copy. Without it chances are CSP Gateway would not be authorized to communicate to IRIS.
Announcement
Anastasia Dyubaylo · Dec 6, 2021

The winners of the InterSystems Security Contest

Hey Developers, The InterSystems Security contest is over. Thank you all for participating in our coding competition! So it's time to announce the winners! A storm of applause goes to these developers and their applications: 🏆 Experts Nomination - winners were determined by a specially selected jury: 🥇 1st place and $4,000 go to the iris-disguise project by @henry 🥈 2nd place and $2,000 go to the zap-api-scan-sample project by @José.Pereira and @Henrique 🥉 3rd place and $1,000 go to the iris-saml-example project by @Dmitry.Maslennikov More winners: 🏅 $100 go the API Security Mediator by @Yuri.Gomes 🏅 $100 go the Data_APP_Security by @Muhammad.Waseem 🏅 $100 go the Server Manager 3.0 Preview by @John.Murray 🏅 $100 go the IRIS Middlewares by @davimassaru.teixeiramuta 🏅 $100 go the isc-apptools-lockdow @MikhailenkoSergey 🏅 $100 go the Audit Mediator by @Yuri.Gomes 🏅 $100 go the passwords-tool by @Dmitry.Maslennikov 🏅 $100 go the appmsw-dbdeploy @MikhailenkoSergey 🏆 Community Nomination - an application that received the most votes in total: 🥇 1st place and $1,000 go to the zap-api-scan-sample project by @José.Pereira and @Henrique 🥈 2nd place and $500 go to the iris-disguise project by @henry 🥉 3rd place and $250 go to the API Security Mediator by @Yuri.Gomes Congratulations to all the winners! Thank you all for your attention to the contest and the efforts you pay into this contest! Good fellows! Congratulate everyone! Congratulation to all. Thanks DC Congratulation to all participants! 👏 Also thanks for participation to: @Oliver.Wilms and his project https-rest-api@Evgeniy.Potapov and his project TimeTracking-workers See you in the next Contests! Congratulations everyone!!!! Congratulations. Well done to the winners! Thank you for participating in the contest and contributing to our community as a result!! Congratulations to all participants!!
Announcement
Anastasia Dyubaylo · Mar 7, 2022

[Video] InterSystems Solutions in AWS

Hi Community, We'll look at moving InterSystems workload to the public cloud, then take a deep dive into the current architectures on the InterSystems cloud platform: ⏯ InterSystems Solutions in AWS Presenters:🗣 Jared Trog, Senior Cloud Engineer, InterSystems🗣 @Regilo.Souza, Product Owner - Cloud Strategy, InterSystems Enjoy watching and stay tuned!
Announcement
Anastasia Dyubaylo · Apr 11, 2022

InterSystems Globals Contest Winners

Hey Developers, We are super excited to announce the winners of the InterSystems Globals contest! The winners of the 19th programming contest are as follows: Experts Nomination 🥇 1st place and $4,000 go to the global-mindmap created by @Yuri.Gomes 🥈 2nd place and $2,000 go to the globals-tool created by @Dmitry.Maslennikov 🥉 3rd place and $1,000 go to the iris-globals-graphDB created by @Muhammad.Waseem More winners: 🏅 $100 go the python-globals-serializer-example created by @José.Pereira 🏅 $100 go the global-archiver created by @Lorenzo.Scalese 🏅 $100 go the blockchain - [ IRIS python ] created by @davimassaru.teixeiramuta 🏅 $100 go the Globals: Embedded Python vs. ObjectScript created by @Robert.Cemper1003 🏅 $100 go the zpm-generate-ui created by @MikhailenkoSergey 🏅 $100 go the GlobalToJSON-XL-Academic created by @Robert.Cemper1003 🏅 $100 go the Cubes created by @Sean.Connelly 🏅 $100 go the GlobalToJSON-Efficient created by @Robert.Cemper1003 🏅 $100 go the iris-globals-contest created by @Oliver.Wilms 🏅 $100 go the GlobalToJSON-Compact created by @Robert.Cemper1003 🏅 $100 go the global-name-search created by @Jailton.Viçôzo 🏅 $100 go the React-UI-Global created by @Evgeniy.Potapov Community Nomination 🥇 1st place and $1,000 go to the globals-tool created by @Dmitry.Maslennikov 🥈 2nd place and $750 go to the python-globals-serializer-example created by @José.Pereira 🥉 3rd place and $500 go to the iris-globals-graphDB created by @Muhammad.Waseem Our BIG congrats to all the participants and winners! We can see all the hard work in your participation, and we would like to thank you for devoting your time and building a project for the InterSystems contest. 🙌 What's next? Don't get disheartened if you didn't win. Remember, persistence is the key to success! Participate in the next contest in May 😎 I am really happy. It's an honor to win the expert nomination. After participating in 17 contests, I achieved the dream of winning. Thank you very much and congratulations for all participants. Congratulations to AAAALLLLL!! 😄😄👏👏 Congratulations to All Congratulation @Yuri.Gomes. Well Done 👏 Thanks! A hearty CONGRATS to the winners :)
Announcement
Yuri Marx · Apr 5, 2022

Contribute to write the InterSystems Mindmap

Hi Community, I published my new app (https://openexchange.intersystems.com/package/global-mindmap) online to write an InterSystems Mindmap with you. Write your mind notes and help to build the InterSystems Mindmap. I will transform the final result in an article. Access: http://ymservices.tech:3000 Thanks @Yuri.Gomes that link doesn't work for me. Hi, In the first time, take about 30 seconds to load, try again, thanks
Article
Yuri Marx · Apr 13, 2022

InterSystems Developer Community Diagram

@Yuri.Gomes. ... I love the diagram!! What about the Evaluation service and the WRC and GettingStarted? Great, I will add! WOW!!! Love it :) Thanks! @Yuri.Gomes - if you go to https://login.InterSystems.com you will see that we have published new icons for all of our applications which are consistent with the ISC look and feel. Feel free to pop these into your diagram for consistency. Any interested in learning more about these services should attend DEV005 at Global Summit where @Pravin.Barton and I will discuss the 15 services and applications you can access via your InterSystems Login Account (Wed at 3:30). Hope to see many of you there! Wow great stuff, thank you @Yuri.Gomes ! Sharing with @Jinmin.Xu, @Piyush.Adhikari, @Paul.Doolub4524, @Vladimir.Prushkovskiy Great Diagram, love it!!!
Announcement
Anastasia Dyubaylo · Jun 13, 2022

InterSystems IRIS Container Updates

Hey Developers, Learn about the changes we've made to InterSystems IRIS Containers, including security updates and the new web gateway container: ⏯ InterSystems IRIS Container Updates 🗣 Presenter: @Eve.Phelps, Senior Systems Developer, InterSystems Stay tuned for the latest videos on InterSystems Developers YouTube!
Announcement
Anastasia Dyubaylo · Mar 29, 2022

InterSystems Global Summit 2022

Global Summit returns! After two years of video conferencing and virtual meetings, we at InterSystems are thrilled to reunite with our partners at InterSystems Global Summit 2022. In our first in-person event since the pandemic started, we're welcoming industry leaders and developers to our flagship conference. Registration is now open! ➡️ InterSystems Global Summit 2022 🗓 Date: June 20-23, 2022 📍 Location: Seattle, WA, United States Join us this year for content on how customers like you are using our technology for innovation and what trends affect our future innovations, including new and enhanced products and product offerings. In-Person Live Breakout Sessions, Experience Labs, Small Group Idea Exchange Cloud & cloud services DevOps Embedded Python HL7® FHIR® Analytics Product use cases New products & services Solutions for healthcare, financial services & supply chain/logistics Interactive Because this year's event is live and in-person, there will be ample opportunity for you to interact with InterSystems product teams, including heads of healthcare & data platforms solutions Technical pros Product trainers InterSystems partners and best of all One another Inspirational Speakers from cutting-edge of technology Ideas & best practices from peers & InterSystems partners, product developers Learning opportunities Hands-on experiences with InterSystems technology The best part: We’ll do it all together. We look forward to seeing you at InterSystems Global Summit 2022! Good day, is there a way to register virtually? No, you are expected to come in person! We are looking forward to our first in-person summit in 2019! You can redeem free registration and accommodation if you have enough points in Global Masters. Would be nice to have the support corner again to talk with the WRC folks.
Announcement
Vadim Aniskin · Jan 18, 2023

InterSystems Ideas News #3

Hey Community! Welcome to the 3rd edition of the InterSystems Ideas news bulletin! Curious about what has happened on the Ideas Portal since the previous one? Read on! First of all, we've created a short video that explains the lifecycle of the ideas on the Portal: ⏯ Lifecycle of ideas on the InterSystems Ideas The most important piece of news is a brand new section on the portal - Portal Guide which contains: ✓ information about the Ideas Portal goal, ✓ a complete list of idea's statuses with their description, ✓ links related to the portal. Want to see something else there? Drop us a line in the comments! Another interesting tidbit is that 11 of your ideas are already in the status "Planned or in Progress". And, to complete this news bulletin, here is the list of the ideas that have already been implemented Career-oriented learning paths Change the layout of the "New idea" screen Enable the server widget on Discord Include support for gRPC protocol in IRIS Make JSON representation of messages in Interoperability message viewer instead of XML Create query builder Global->JSON->Global converter Chatbots solution for InterSystems Data Platforms 3DES support InterSystems IRIS as a Datasource for Google DataStudio Introduce a basic template to create interoperability adapters using Embedded Python Introduce the project of helpful one-liners As usual, don't forget to vote, comment, and subscribe to the ideas to track and influence their progress. We're looking forward to your ideas on the InterSystems Ideas portal!
Discussion
Olga Zavrazhnova · Aug 9, 2022

MEMErizible Technology - InterSystems Memes

A Minute Of Laughter on the Developer Community with #InterSystemsMemes Meme author: @Mathieu.Delagnes Have your own idea for a meme? Submit in this challenge on Global Masters. About InterSystems Memes rubric: A month ago we launched a challenge on Global Masters where we asked you to create memes about InterSystems technology. We had a lot of fun seeing all the entries so we decided to share this merriment with all DC members! 😁😁😁 Who's next?)) Don't hesitate to share the memes in the comments to this post as well ;) * ~90% under the surface For performance-minded folks: ...
Announcement
Anastasia Dyubaylo · Mar 22, 2022

InterSystems Developer Community in French

Hey Developers, Now it's time for all French-speaking users of our community! We're super excited to announce the official start of the InterSystems Developer Community in French! Let me introduce you @Guillaume.Rongier7183, @Robert.Bira and @Irène.Mykhailova as managers of the French Community. Here are the main points you need to know: ➡️ You can switch between sites using the language menu in the top right corner: If you know French, it's great that you can contribute articles, make discussions, ask and answer questions about InterSystems Data Platforms now in French too! Also! ➡️ You can use Language Switcher – the option to switch to the French version of the article. Also! ➡️ If you published a post in English or any other language, it could be translated by anyone in French and will be helpful for even more people! Everyone is able now to add or request a translation to any post on the Developer Community. After selecting any language using the Language Switcher, any user can add a link to the translation of the post or request its translation. ➡️ The same thing works for the French Community site – you can translate the French article into English or any other language. Be sure, you know both languages well! Please feel free to provide any feedback on how to make our French Community better. Welcome to the InterSystems Developer Community in French! 🚀 Let's discuss the topics that you'd like to see and discuss on the FR DC. Take the poll below ☑️ Or feel free to share your suggestions in comments! C'est super! Bienvenue!!! Génial !@Yann.Simons9265 @Aurélien.Lansmanne @Damiano.Porrovecchio Génial! Super nouvelle! J'ai transmis l'info à l'équipe avec laquelle je travaille, ainsi qu'aux personnes qui pourraient être intéressées par Intersystems... On ne sait jamais. Reste à faire vivre cette commu! Merci @Guillaume.Rongier7183 @Irène.Mykhailova et @Robert.Bira, ainsi que tous ceux qui ont oeuvrés à l'ouverture de ce site francophone Bienvenue à tous!! 👋👋👏👏 Enfin la communauté dans la langue deRobert le Magnifique et son fils Guillaume le Conquérant. !* * * * * + + + * * * * * Bienvenue The Great Getsby !
Announcement
Dmitry Maslennikov · Jun 3, 2022

InterSystems extension for Docker Desktop

Very recently Docker showed a very new feature added to their Docker Desktop tool. It was a good way to start using Docker on macOS and Windows, and they also released the same tool for Linux as well. And new feature Extensions add an ability to extend this GUI application with some extra abilities from extensions. I've create an extension to Docker for InterSystems, which is mostly by now like an UI to containers.intersystems.com There are a few options, that helps to filter the list of images available. Community, swiche between General version of IRIS and Community Edition ARM64, to see only ARM64 images Major versions only, filters to show only latest major versions (e.g. 2022.1.*, 2021.2.*, 2021.1.*,1.1.*) Also Search by name and tag Copy image name with tag to clipboard Easy Pull images Delette images (if not used) Installation This project have not published in Docker Extensions Marketplace, yet. And it requires Docker Extensions SDK installed manually, to be able to install extensions not available on marketplace manually. Please follow the official instructions and install Docker Extensions SDK. After installing SDK, docker command will be able to use new command docker extension ls And to install this extension, just use this command docker extension install caretdev/intersystems-extension:0.0.3 Or update the already installed extension docker extension update caretdev/intersystems-extension:0.0.3 And you can access to installed extension from Extensions list in Docker Desktop If you like this project please vote on the Grand Prix contest Published video
Article
Iryna Mykhailova · Aug 2, 2022

Data models in InterSystems IRIS

Before we start talking about databases and different data models that exist, first we'd better talk about what a database is and how to use it. A database is an organized collection of data stored and accessed electronically. It is used to store and retrieve structured, semi-structured, or raw data which is often related to a theme or activity. At the heart of every database lies at least one model used to describe its data. And depending on the model it is based on, a database may have slightly different characteristics and store different types of data. To write, retrieve, modify, sort, transform or print the information from the database, a software called Database Management System (DBMS) is used. The size, capacity, and performance of databases and their respective DBMS have increased by several orders of magnitude. It has been made possible by technological advances in various areas, such as processors, computer memory, computer storage, and computer networks. In general, the development of database technology can be divided into four generations based on the data models or structure: navigational, relational, object and post-relational. Unlike the first three generations, which are characterized by a specific data model, the fourth generation includes many different databases based on different models. They include column, graph, document, component, multidimensional, key-value, in-memory etc. All these databases are united by a single name NoSQL (No SQL or now it is more accurate to say Not only SQL). Moreover, now a new class appears, which is called NewSQL. These are modern relational databases that aim to provide the same scalable performance as NoSQL systems for online transaction processing workloads (read-write) while using SQL and maintaining ACID. Incidentally, among these fourth generation databases are those that support multiple data models mentioned above. They are called multi-model databases. A good example of this type of database is InterSystems IRIS. That is why I will use it to give examples of different types of models as they appear. The first generation databases used hierarchical or network models. At the heart of the former is a tree structure where each record has only one owner. You can see how this works using the example of InterSystems IRIS, because its main model is hierarchical and all data is stored in globals (which are B*-trees). You can read more about globals here. We can create this tree in IRIS : Set ^a("+7926X", "city") = "Moscow" Set ^a("+7926X", "city", "street") = "Req Square" Set ^a("+7926X", "age") = 25 Set ^a("+7916Y", "city") = "London" Set ^a("+7916Y", "city", "street") = "Baker Street" Set ^a("+7916Y", "age") = 36 And see it in the database: After Edgar F. Codd proposed his relational algebra and his theory of data storage, using relational principles, in 1969. After, the relational databases were created. The use of relations (tables), attributes (columns), tuples (rows), and, most importantly, transactions and ACID requirements made these databases very popular and they remain so now. For example, we have the schema: We can create and populate tables: And if we write the query: select p.ID, p.Name, a.Country, A.City from My.Person p left join My.Address a on p.Address = a.ID we will receive the answer: Despite the significant advantages of relational databases, with the spread of object languages, it became necessary to store object-oriented data in databases. That's why in the 1990s the first object-oriented and object-relational databases appeared. The latter were created on the basis of relational databases by adding add-ons to simulate the work with objects. The former were developed from scratch based on the recommendations of the OMG (Object Management Group) consortium and after ODMG (Object Data Management Group). The key ideas of these object-oriented databases are the following. The single data warehouse is accessible using: object definition language - schema definition, allows defining classes, their attributes, relations, and methods, object-query language - declarative, almost SQL-like language that allows getting objects from the database, object manipulation language - allows modification and saving data in the database, supports transactions and method calls. This model allows obtaining data from databases using object-oriented languages. If we take the same structure as in the previous example but in the object-oriented form, we will have the following classes: Class My.Person Extends %Persistent { Property Name As %Name; Property Address As My.Address; } Class My.Address Extends %Persistent { Property Country; Property City; } And we can create the objects using the object-oriented language: set address = ##class(My.Address).%New() set address.Country = "France" set address.City = "Marseille" do address.%Save() set person = ##class(My.Person).%New() set person.Address = address set person.Name = "Quouinaut, Martin" do person.%Save() Unfortunately, object databases did not succeed in competing with relational databases from their dominant position, and as a result, many ORMs appeared. In any case, with the spread of the Internet in the 2000s and the emergence of new requirements for data storage, other data models and DBMSs started to emerge. Two of these models that are used in IRIS are document and column models. Document-oriented databases are used to manage semi-structured data. This is data that does not follow a fixed structure and carries the structure within it. Each unit of information in such a database is a simple pair: a key and a specific document. This document is formatted usually in JSON and contains the information. Since the database does not require a certain schema, it is also possible to integrate different types of documents in the same warehouse. If we take the previous example again, we can have documents like these: { "Name":"Quouinaut, Martin", "Address":{ "Country":"France", "City":"Paris" } } { "Name":"Merlingue, Luke", "Address":{ "Country":"France", "City":"Nancy" }, "Age":26 } These two documents with a different number of fields are stored in the IRIS database without any problem. And the last example of a model that will be available in version 2022.2 is the column model. In this case, the DBMS stores the data tables per column and not per row. Column orientation allows more efficient access to data for querying a subset of columns (eliminating the need to read columns that are not relevant), and more options for data compression. Compression by column is also more efficient when the data in the column is similar. However, they are generally less efficient for inserting new data. You can create this table: Create Table My.Address ( city varchar(50), zip varchar(5), country varchar(15) ) WITH STORAGETYPE = COLUMNAR In this case, the class is like this: Spoiler Class My.Address Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {UnknownUser}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = Address ] { Property city As %Library.String(COLLATION = "EXACT", MAXLEN = 50) [ SqlColumnNumber = 2 ]; Property zip As %Library.String(COLLATION = "EXACT", MAXLEN = 5) [ SqlColumnNumber = 3 ]; Property country As %Library.String(COLLATION = "EXACT", MAXLEN = 15) [ SqlColumnNumber = 4 ]; Parameter STORAGEDEFAULT = "columnar"; Parameter USEEXTENTSET = 1; /// Bitmap Extent Index auto-generated by DDL CREATE TABLE statement. Do not edit the SqlName of this index. Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ]; Storage Default { <Data name="_CDM_city"> <Attribute>city</Attribute> <ColumnarGlobal>^q3AW.DZLd.1.V1</ColumnarGlobal> <Structure>vector</Structure> </Data> <Data name="_CDM_country"> <Attribute>country</Attribute> <ColumnarGlobal>^q3AW.DZLd.1.V2</ColumnarGlobal> <Structure>vector</Structure> </Data> <Data name="_CDM_zip"> <Attribute>zip</Attribute> <ColumnarGlobal>^q3AW.DZLd.1.V3</ColumnarGlobal> <Structure>vector</Structure> </Data> <DataLocation>^q3AW.DZLd.1</DataLocation> <ExtentLocation>^q3AW.DZLd</ExtentLocation> <ExtentSize>3</ExtentSize> <IdFunction>sequence</IdFunction> <IdLocation>^q3AW.DZLd.1</IdLocation> <Index name="DDLBEIndex"> <Location>^q3AW.DZLd.2</Location> </Index> <Index name="IDKEY"> <Location>^q3AW.DZLd.1</Location> </Index> <IndexLocation>^q3AW.DZLd.I</IndexLocation> <Property name="%%ID"> <AverageFieldSize>3</AverageFieldSize> <Selectivity>1</Selectivity> </Property> <Property name="city"> <AverageFieldSize>7</AverageFieldSize> <Selectivity>33.3333%</Selectivity> </Property> <Property name="country"> <AverageFieldSize>7</AverageFieldSize> <Selectivity>33.3333%</Selectivity> </Property> <Property name="zip"> <AverageFieldSize>7</AverageFieldSize> <Selectivity>33.3333%</Selectivity> </Property> <SQLMap name="%%DDLBEIndex"> <BlockCount>-4</BlockCount> </SQLMap> <SQLMap name="IDKEY"> <BlockCount>-4</BlockCount> </SQLMap> <SQLMap name="_CDM_city"> <BlockCount>-4</BlockCount> </SQLMap> <SQLMap name="_CDM_country"> <BlockCount>-4</BlockCount> </SQLMap> <SQLMap name="_CDM_zip"> <BlockCount>-4</BlockCount> </SQLMap> <StreamLocation>^q3AW.DZLd.S</StreamLocation> <Type>%Storage.Persistent</Type> } } Then we insert the data: insert into My.Address values ('London', '47000', 'UK') insert into My.Address values ('Paris', '54000', 'France') insert into My.Address values ('Kyiv', '03000', 'Ukraine') In the globals we see: If we open the global with the city names, we will see : And if we write a query: select City from My.Address we receive data: In this case, the DBMS just reads a global to get the whole result. And it saves time and resources when reading. So, we have talked about 5 different data models supported by the InterSystems IRIS database. These are the hierarchical, relational, object, document, and column models. Hope you will find this article useful when trying to figure out which models are available. If you have any questions feel free to ask them in the comments. Very nice article Excellent article - thank you very much for taking the time to write this up!!! 💡 This article is considered as InterSystems Data Platform Best Practice. Thanks @Iryna.Mykhailova for this brilliant article ! Very clear and cleverly presented. NB : for column-oriented storage specified at the table level via the statement WITH STORAGETYPE = COLUMNAR , it should be noted that IRIS leaves itself free to choose for you the most commonly optimal storage (in row or in column), according to the types of data. Example : the following statement : CREATE TABLE a.addressV1 ( city varchar(50), zip varchar(15), country varchar(15) ) WITH STORAGETYPE = COLUMNAR Will not create any column-oriented storage, due to the risk of too disparate data, due to the number of characters allowed in each column (15 or 50) : Class a.addressV1 Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {_SYSTEM}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = addressV1 ] { Property city As %Library.String(COLLATION = "EXACT", MAXLEN = 50, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 2 ]; Property zip As %Library.String(COLLATION = "EXACT", MAXLEN = 15, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 3 ]; Property country As %Library.String(COLLATION = "EXACT", MAXLEN = 15, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 4 ]; Parameter STORAGEDEFAULT = "columnar"; Parameter USEEXTENTSET = 1; while the example given in the article, retains a column (and only one) in column-oriented storage, since having only 5 characters allowed for the zip column. CREATE TABLE a.addressV2 ( city varchar(50), zip varchar(5), country varchar(15) ) WITH STORAGETYPE = COLUMNAR Class a.addressV2 Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {_SYSTEM}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = addressV2 ] { Property city As %Library.String(COLLATION = "EXACT", MAXLEN = 50, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 2 ]; Property zip As %Library.String(COLLATION = "EXACT", MAXLEN = 5) [ SqlColumnNumber = 3 ]; Property country As %Library.String(COLLATION = "EXACT", MAXLEN = 15, STORAGEDEFAULT = "ROW") [ SqlColumnNumber = 4 ]; Parameter STORAGEDEFAULT = "columnar"; Parameter USEEXTENTSET = 1;
Announcement
Olga Zavrazhnova · Sep 13, 2022

InterSystems at HackMIT hackathon

Fall Hackathon Season is ready now! InterSystems will take part in HackMIT hackaton, a long-weekend hackaton organized by the MIT (Massachusetts Institute of Technology), where thousands of students come together to work on cool software and/or hardware projects. This year the HackMIT is in-person again, at the MIT campus, and will take place during the first weekend of October.This year the main tracks are Education, Sustainability, New Frontiers, and Entertainment.InterSystems challenge will be related to 1 or 2 of the main tracks and will be revealed on September 28.Stay tuned! HackMIT it's a great event! I hope this year could be bigger than the last one. Agree - last year's event was so much fun! And it was so successful, with the help of our superb mentors! :)This year they do it fully in person, I also hope it will big and awesome!