Data Storage
As with Software Development, the mechanisms typically used for data storage have been largely unchanged for decades and involve many different ways of holding and accessing the data.
This situation makes developing applications more complex than it needs to be, at any point a decision has to be made about how a particular item of data is to be held and then the data often has to be transferred back and forth, to or from, different storage methods at different times. All of this adds complexity and restricts the changes that may be made in the future. For example, within a conventional application program, data may be held in local variables, global variables, arrays, as an object on the heap etc. and when stored outside of the program may be written to a control on a dialog, to a data file, to a generic type of data file (e.g. spreadsheet or document), to a database of some sort. Each of these external storage types may be local to that system or elsewhere on a network or in the cloud.
The complexity relating to data storage arose originally due to the overriding need to maximise performance and minimise memory requirements of early computers. Since that time, even though today's systems are dramatically improved, the methods of data storage are still largely the same and the reason for this is mainly the impracticality of changing one component of the software development process in isolation whilst still fitting in with the remaining components. Only by starting from scratch and designing a completely new approach to software development and data storage that a dramatic improvement has become possible; based upon Adapt technology.
A good example of the problems relating to data storage using conventional development tools is that the most secure and flexible mechanism to store information is in a database. The architecture employed and the large overhead involved in accessing information held in a database means that data is extracted from the database once and then may be held in a variety of other ways during calculations and logical processing before any results are subsequently written back to the database.
The need to employ varied methods of data storage leads to a very significant increase in source code complexity and this makes future changes more difficult and less reliable. More importantly, the values in memory become disassociated from the original values in the database so that when an error occurs it is hard (or almost impossible) for the 'system' to explain the error in terms that are meaningful to the designer. Similarly, when a design change is needed, it can be very hard to determine the sections of source code that may need to be changed.
Essentially, the problem is that once a value had been read from a database or other form of external storage, then held in memory and then passed around between different parts of the application, involved in calculations etc. there is no automatic way of tracing the data paths to and from the value back to the relevant database items. As a result, the task of identifying and diagnosing problems or making changes can become a lot more difficult and expensive than it needs to be. Also, such a system cannot be automatically self-descriptive.
In order to overcome the inherent problems of conventional forms of data storage has required the development of a Universal Storage mechanism providing a set of Adapt Data Structures (otherwise known as dAtas). A dAta has similarities to a database in that it is responsible for holding information securely, allowing concurrent access and recording changes etc. The major difference is that the dAta system is able to provide almost instantaneous access to the data items whilst still maintaining complete data integrity.
The very high performance that is possible with dAtas means that they can be used for ALL data storage at ALL times within Adapt. An important principle of Adapt is that a single form of data storage is employed across the whole system.
The use of dAtas means that alternative types of storage (such as those mentioned above) are not needed resulting in much simpler applications that are easier to design, maintain and modify. It also means that the data paths relating to each item of data are known and can be analysed to help in understanding the application. Such an analysis can be of great assistance to an application designer and to a user to help understand the function and operation of the application.
In addition, as all the information in Adapt is stored in dAtas, all aspects of the design of an application are potentially able to be accessed by other applications so that essentially they can 'see' what information an application holds and the operations that may be performed upon it. This allows applications to automatically configure themselves to work better together.