section 2.5 and [1]. Mnesia is known to have problems with performance degradation when the database grows in size. Mnesia consists of a frontend with a user API and a backend using dets (an disk-based key-value storę, also a part of Erlang). Our objective is to compare and contrast runtime statistics from running the HLR with Erlangs database Mnesia and a modified version running another backend.
1.3 Methodology
During this project we have used several standard software engineering prac-tices including research, design, implementation and validation. In this section we outline how each practice was done.
1.3.1 Research phase
The research phase mostly consisted of reading and understanding sev-eral 3GPP specifications, related to subscriber data and the various HLR-supported operations. Much of this work consisted of separating and dis-tinguishing relevant parameters and operations that we need to include in our implementation. The operations are specified as part of [3] and the parameters for the subscriber data in [4].
1.3.2 Design phase
We designed the database tables for subscriber data. These were separated as much as possible based on different criterias. One criteria we use is time-aspect of the data-fields stored, i.e. whether the data is permanent or temporary. Another aspect is security, e.g. an administrator accessing the database should not be able to see all the data values for a particular subscriber. And finally there is disk-access issues, if the tables become too large we will suffer from prolonged disc reads when we try to access some particular data-field for a subscriber. These criteria depends on the fact that when performing a read-operation in Mnesia, you read the entire record in the table, there is no way to read a specific data-field. Morę about the actual design and the decisions involved in this stage can be found in section 3
1.3.3 Implementation phase
The implementation phase had two bigger tasks to complete, the first was to implement the design and the second included writing a new backend for Mnesia, to see if we could eliminate Mnesias weaknesses. The Mnesia backend is implemented using dets tables, so exchanging the backend involves changing the source codę of dets so it invokes another database backend. The backend we chose here is CouchDB, details can be found in section 4.