Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> In this paper we examine the probl of how to give hands-on assignments in a database syst internals course. We argue that current approaches are inadequate, either because they are not sufficiently comprehensive or because they require using software that has a steep learning curve. We then describe SimpleDB, which is software written expressly for such a course. SimpleDB is a database syst in the spirit of Minibase. Unlike Minibase, however, it supports multiple users and transactions via JDBC, and its code is easy to read and modify. We then describe a course that we teach using SimpleDB, and discuss the educational benefits resulting from it. <s> BIB001 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> We present Scalaris, an Erlang implementation of a distributed key/value store. It uses, on top of a structured overlay network, replication for data availability and majority based distributed transactions for data consistency. In combination, this implements the ACID properties on a scalable structured overlay. By directly mapping the keys to the overlay without hashing, arbitrary key-ranges can be assigned to nodes, thereby allowing a better load-balancing than would be possible with traditional DHTs. Consequently, Scalaris can be tuned for fast data access by taking, e.g. the nodes' geographic location or the regional popularity of certain keys into account. This improves Scalaris' lookup speed in datacenter or cloud computing environments. Scalaris is implemented in Erlang. We describe the Erlang software architecture, including the transactional Java interface to access Scalaris. Additionally, we present a generic design pattern to implement a responsive server in Erlang that serializes update operations on a common state, while concurrently performing fast asynchronous read requests on the same state. As a proof-of-concept we implemented a simplified Wikipedia frontend and attached it to the Scalaris data store backend. Wikipedia is a challenging application. It requires - besides thousands of concurrent read requests per seconds - serialized, consistent write operations. For Wikipedia's category and backlink pages, keys must be consistently changed within transactions. We discuss how these features are implemented in Scalaris and show its performance. <s> BIB002 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> Bigtable is a distributed storage system for managing structured data that is designed to scale to a very large size: petabytes of data across thousands of commodity servers. Many projects at Google store data in Bigtable, including web indexing, Google Earth, and Google Finance. These applications place very different demands on Bigtable, both in terms of data size (from URLs to web pages to satellite imagery) and latency requirements (from backend bulk processing to real-time data serving). Despite these varied demands, Bigtable has successfully provided a flexible, high-performance solution for all of these Google products. In this paper we describe the simple data model provided by Bigtable, which gives clients dynamic control over data layout and format, and we describe the design and implementation of Bigtable. <s> BIB003 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> In CIDR 2009, we presented a collection of requirements for SciDB, a DBMS that would meet the needs of scientific users. These included a nested-array data model, science-specific operations such as regrid, and support for uncertainty, lineage, and named versions. In this paper, we present an overview of SciDB's key features and outline a demonstration of the first version of SciDB on data and operations from one of our lighthouse users, the Large Synoptic Survey Telescope (LSST). <s> BIB004 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> How does MongoDB help you manage a huMONGOus amount of data collected through your web application? With this authoritative introduction, you'll learn the many advantages of using document-oriented databases, and discover why MongoDB is a reliable, high-performance system that allows for almost infinite horizontal scalability. Written by engineers from 10gen, the company that develops and supports this open source database, MongoDB: The Definitive Guide provides guidance for database developers, advanced configuration for system administrators, and an overview of the concepts and use cases for other people on your project. Learn how easy it is to handle data as self-contained JSON-style documents, rather than as records in a relational database. Explore ways that document-oriented storage will work for your project Learn how MongoDBs schema-free data model handles documents, collections, and multiple databases Execute basic write operations, and create complex queries to find data with any criteria Use indexes, aggregation tools, and other advanced query techniques Learn about monitoring, security and authentication, backup and repair, and more Set up master-slave and automatic failover replication in MongoDB Use sharding to scale MongoDB horizontally, and learn how it impacts applications Get example applications written in Java, PHP, Python, and Ruby <s> BIB005 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> Introduction ::: Perhaps the business case for adopting open source software is an easy sell. After all, the software is free, and can be simply downloaded from the Internet and installed or customized as needed. Organizations interested in reducing the licensing fees of proprietary software, while also avoiding the penalties and legal liabilities associated with their illegal use, can definitely consider open source software a plausible alternative. However, less obvious than the cost savings but equally important are the barriers ("hidden costs") of adopting open source software. ::: Open source software has created considerable excitement in the business world over the last decade. These applications, designed by groups of volunteer software developers, have the potential to break the current dominance of proprietary software and restrictive licenses for many business applications, reduce software development time and improve software quality, and most importantly, bring much needed software applications within the reach of individuals and small businesses, who cannot otherwise afford such software. Further, unlike proprietary software, open source software applications make their source code available for free, which can be customized to fit the unique needs of specific organizations. ::: Many organizations have caught on to open source software and realized significant cost savings in technology expenditure as a result. For instance, Cendant Travel Distribution Services replaced a $100 million mainframe system with a $2.5 million system running on 144 Linux servers. Amazon.com cut its technology expenditure from $71 million to $54 million by switching to open source applications. Sabre Holdings saved tens of millions of dollars by adopting MySQL, an open source database product. Though the basic open source software is free, the prospect of paid ancillary products and services such as hardware and consulting has motivated many erstwhile proprietary technology vendors such as Hewlett-Packard, IBM, and Sun Microsystems to embrace open source software and offer value-added services based on such software. ::: Table 1 shows an estimated range of the current global market share of several of today's open source software applications. This table shows that though the open source market is large and growing for some application domains such as Web server (such as Apache), server operating systems (such as Linux Server), database server (such as MySQL), electronic mail client (such as Sendmail), and Internet browser (such as Firefox), it is lagging behind its proprietary counterparts in other domains such as client operating systems (such as Linux Workstation), office productivity software (such as OpenOffice), and enterprise resource planning (ERP) systems. This pattern suggests that there may be significant barriers to open source software adoption among some sectors of the user populations. ::: It is widely believed that proprietary software vendors often use fear, uncertainty and doubt to undermine and cut the market potential of their open source competitors. The objective of this paper is to reduce that uncertainty via a candid discussion of the barriers confronting open source software adoption and potential remedies to those barriers. These barriers and their remedies, summarized in Table 2, are discussed in detail. <s> BIB006 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> What could you do with data if scalability wasn't a problem? With this hands-on guide, you'll learn how Apache Cassandra handles hundreds of terabytes of data while remaining highly available across multiple data centers -- capabilities that have attracted Facebook, Twitter, and other data-intensive companies. Cassandra: The Definitive Guide provides the technical details and practical examples you need to assess this database management system and put it to work in a production environment.Author Eben Hewitt demonstrates the advantages of Cassandra's nonrelational design, and pays special attention to data modeling. If you're a developer, DBA, application architect, or manager looking to solve a database scaling issue or future-proof your application, this guide shows you how to harness Cassandra's speed and flexibility.Understand the tenets of Cassandra's column-oriented structure Learn how to write, update, and read Cassandra data Discover how to add or remove nodes from the cluster as your application requires Examine a working application that translates from a relational model to Cassandra's data model Use examples for writing clients in Java, Python, and C# Use the JMX interface to monitor a cluster's usage, memory patterns, and more Tune memory settings, data storage, and caching for better performance <s> BIB007 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> We present HyperGraphDB, a novel graph database based on generalized hypergraphs where hyperedges can contain other hyperedges. This generalization automatically reifies every entity expressed in the database thus removing many of the usual difficulties in dealing with higher-order relationships. An open two-layered architecture of the data organization yields a highly customizable system where specific domain representations can be optimized while remaining within a uniform conceptual framework. HyperGraphDB is an embedded, transactional database designed as a universal data model for highly complex, large scale knowledge representation applications such as found in artificial intelligence, bioinformatics and natural language processing. <s> BIB008 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> In this paper, we examine a number of SQL and socalled "NoSQL" data stores designed to scale simple OLTP-style application loads over many servers. Originally motivated by Web 2.0 applications, these systems are designed to scale to thousands or millions of users doing updates as well as reads, in contrast to traditional DBMSs and data warehouses. We contrast the new systems on their data model, consistency mechanisms, storage mechanisms, durability guarantees, availability, query support, and other dimensions. These systems typically sacrifice some of these dimensions, e.g. database-wide transaction consistency, in order to achieve others, e.g. higher availability and scalability. <s> BIB009 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> Reliability and scalability of an application is dependent on how its application state is managed. To run applications at massive scale requires one to operate datastores that can scale to operate seamlessly across thousands of servers and can deal with various failure modes such as server failures, datacenter failures and network partitions. The goal of Amazon DynamoDB is to eliminate this complexity and operational overhead for our customers by offering a seamlessly scalable database service. In this talk, I will talk about how developers can build applications on DynamoDB without having to deal with the complexity of operating a large scale database. <s> BIB010 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> This paper describes the Change Data Capture CDC problems in the context of column-oriented NoSQL databases CoNoSQLDBs. Based on analyzing the impacts and constraints caused by the core features of CoNoSQLDBs, we propose a logical change data delta model and the corresponding delta representation which could work with different incremental applications and diverse data targets. Moreover, we present five feasible CDC approaches, i.e. Timestamp-based approach, Audit-column approach, Log-based approach, Trigger-based approach and Snapshot differential approach and indicate the performance winners under different circumstances. <s> BIB011 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> The online encyclopedia Wikipedia is a vast, constantly evolving tapestry of interlinked articles. For developers and researchers it represents a giant multilingual database of concepts and semantic relations, a potential resource for natural language processing and many other research areas. This paper introduces the Wikipedia Miner toolkit, an open-source software system that allows researchers and developers to integrate Wikipedia@?s rich semantics into their own applications. The toolkit creates databases that contain summarized versions of Wikipedia@?s content and structure, and includes a Java API to provide access to them. Wikipedia@?s articles, categories and redirects are represented as classes, and can be efficiently searched, browsed, and iterated over. Advanced features include parallelized processing of Wikipedia dumps, machine-learned semantic relatedness measures and annotation features, and XML-based web services. Wikipedia Miner is intended to be a platform for sharing data mining techniques. <s> BIB012 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> SummaryRedis in Action introduces Redis and walks you through examples that demonstrate how to use it effectively. You'll begin by getting Redis set up properly and then exploring the key-value model. Then, you'll dive into real use cases including simple caching, distributed ad targeting, and more. You'll learn how to scale Redis from small jobs to massive datasets. Experienced developers will appreciate chapters on clustering and internal scripting to make Redis easier to use. About the TechnologyWhen you need near-real-time access to a fast-moving data stream, key-value stores like Redis are the way to go. Redis expands on the key-value pattern by accepting a wide variety of data types, including hashes, strings, lists, and other structures. It provides lightning-fast operations on in-memory datasets, and also makes it easy to persist to disk on the fly. Plus, it's free and open source. About this bookRedis in Action introduces Redis and the key-value model. You'll quickly dive into real use cases including simple caching, distributed ad targeting, and more. You'll learn how to scale Redis from small jobs to massive datasets and discover how to integrate with traditional RDBMS or other NoSQL stores. Experienced developers will appreciate the in-depth chapters on clustering and internal scripting. Written for developers familiar with database concepts. No prior exposure to NoSQL database concepts nor to Redis itself is required. Appropriate for systems administrators comfortable with programming. What's InsideRedis from the ground up Preprocessing real-time data Managing in-memory datasets Pub/sub and configuration Persisting to diskAbout the Author Dr. Josiah L. Carlson is a seasoned database professional and an active contributor to the Redis community. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. Table of ContentsPART 1 GETTING STARTED Getting to know Redis Anatomy of a Redis web application PART 2 CORE CONCEPTS Commands in Redis Keeping data safe and ensuring performance Using Redis for application support Application components in Redis Search-based applications Building a simple social network PART 3 NEXT STEPS Reducing memory use Scaling Redis Scripting Redis with Lua <s> BIB013 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> Many problems in computational neuroscience, neuroinformatics, pattern/image recognition, signal processing and machine learning generate massive amounts of multidimensional data with multiple aspects and high dimensionality. Tensors (i.e., multi-way arrays) provide often a natural and compact representation for such massive multidimensional data via suitable low-rank approximations. Big data analytics require novel technologies to efficiently process huge datasets within tolerable elapsed times. Such a new emerging technology for multidimensional big data is a multiway analysis via tensor networks (TNs) and tensor decompositions (TDs) which represent tensors by sets of factor (component) matrices and lower-order (core) tensors. Dynamic tensor analysis allows us to discover meaningful hidden structures of complex data and to perform generalizations by capturing multi-linear and multi-aspect relationships. We will discuss some fundamental TN models, their mathematical and graphical descriptions and associated learning algorithms for large-scale TDs and TNs, with many potential applications including: Anomaly detection, feature extraction, classification, cluster analysis, data fusion and integration, pattern recognition, predictive modeling, regression, time series analysis and multiway component analysis. ::: Keywords: Large-scale HOSVD, Tensor decompositions, CPD, Tucker models, Hierarchical Tucker (HT) decomposition, low-rank tensor approximations (LRA), Tensorization/Quantization, tensor train (TT/QTT) - Matrix Product States (MPS), Matrix Product Operator (MPO), DMRG, Strong Kronecker Product (SKP). <s> BIB014 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> As the relevant data sets get large, existing in-memory schemes for tensor decomposition become increasingly ineffective and, instead, memory-independent solutions, such as in-database analytics, are necessitated. In this paper, we present techniques for efficient implementations of in-database tensor decompositions on chunk-based array data stores. The proposed static and incremental in-database tensor decomposition operators and their optimizations address the constraints imposed by the main memory limitations when handling large and high-order tensor data. Firstly, we discuss how to implement alternating least squares operations efficiently on a chunk-based data storage system. Secondly, we consider scenarios with frequent data updates and show that compressed matrix multiplication techniques can be effective in reducing the incremental tensor decomposition maintenance costs. To the best of our knowledge, this paper presents the first attempt to develop efficient and optimized in-database tensor decomposition operations. We evaluate the proposed algorithms on tensor data sets that do not fit into the available memory and results show that the proposed techniques significantly improve the scalability of this core data analysis. <s> BIB015 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> Today's data management systems increasingly need to support both tensor-algebraic operations (for analysis) as well as relational-algebraic operations (for data manipulation and integration). Tensor decomposition techniques are commonly used for discovering underlying structures of multi-dimensional data sets. However, as the relevant data sets get large, existing in-memory schemes for tensor decomposition become increasingly ineffective and, instead, memory-independent solutions, such as in-database analytics, are necessitated. We introduce an in-database analytic system for efficient implementations of in-database tensor decompositions on chunk-based array data stores, so called, TensorDB. TensorDB includes static in-database tensor decomposition and dynamic in-database tensor decomposition operators. TensorDB extends an array database and leverages array operations for data manipulation and integration. TensorDB supports complex data processing plans where multiple relational algebraic and tensor algebraic operations are composed with each other. <s> BIB016 </s> Big data storage technologies: a survey <s> Fig. 4 Examples of data models: (a) key-value; (b) column-oriented; (c) document-oriented; (d) graph <s> With the development of cloud computing and internet; e-Commerce, e-Business and corporate world revenue are increasing with high rate. These areas not only require scalable and consistent databases but also require inter database transaction support. In this paper, we present, a scalable three-tier architecture along with a distributed middle-ware protocol to support atomic transactions across heterogeneous NoSQL databases. Our methodology does not compromise on any assumption on the accuracy of failure modalities. Hence, it is suitable for a class of heterogeneous distributed systems. To achieve such a target, our architectural model exploits an innovative methodology to achieve distributed atomic transactions. We simulate this architectural setup with different latency tests under different environments to produce reliable impact and correctness. This study proposes a three-tier architecture to facilitate atomic transactions among heterogeneous NoSQL distributed database environment as HBase.The first tier called client tier, deals with user requests. The client tier wraps transaction request and deliver it to a corresponding global transaction manager (GTM), which is assigned by a manager node.The second tier called middle tier, contains a zookeeper, manager nodes, and labour nodes. Zookeeper assigns an active manager node to the client and the active manager node assigns a labour node to process the transaction.The third tier called distributed tier manages multiple heterogeneous NoSQL databases participating with different transactions.Experimental results show that the proposed architecture is scalable and fault tolerated. <s> BIB017
Column-oriented: This category of NoSQL databases is suitable for vertically partitioned, contiguously stored, and compressed storage systems. Column-oriented databases store columns of data separately, unlike traditional storage where data are stored in the form of complete records. Data reads and retrieval of attributes in such systems is quite fast and comparatively less expensive, as only the relevant column is accessed and concurrent process execution is performed for each column BIB011 . Column-oriented databases are highly scalable and eventually consistent. They provide support to applications for reliable and highly available storage BIB017 . The application areas of column-oriented databases are customer record analysis, data warehousing, patient data management, library systems, and wherever analysis is required to aggregate similar data items. Furthermore, with column-oriented structure it is convenient to add new features in all rows. For example, an online shopping website can apply aggregation on mostly viewed or ordered items in a specific time span, the trendy regions for online shopping, and the success rate of online trading in a year. Document-oriented: Document-oriented data model is similar to key-value structure and stores data in the form of key and value as reference to the document. However, document databases support more complex queries and hierarchical relationships. This data model usually implements the JSON format and offers very flexible schema BIB005 . Although the storage architecture is schemaless for structured data, indexes are well defined in document-oriented databases. SimpleDB is the only database that does not offer explicitly defined indexes BIB009 . Document-oriented databases extract metadata to be used for further optimization and store it as documents. Use cases for document-oriented databases include user profiles on social networks, analysis of websites, and complex transactional data applications. On Facebook, as an example, users may provide less or extensive information on their profile. Each user profile will be stored as a document. The performance of heuristic schema offered by a document-oriented data storage model depends upon the user inputs and nature of queries. Graph: Graph databases are the best choice to store data along with relationships. Graph databases offer persistent storage of objects and relationships and support simple and understandable queries with their own syntax  . Modern enterprises are expected to implement graph databases for their complex business processes and interconnected data, as this relational data structure offers easy data traversal  . Highly frequent trading systems and recommendation systems prefer graph databases to achieve low latency. For instance, getting recommendations from customer feedback data on a commerce website requires self-joined, multilevel queries for traditional databases, which becomes a very complex operation. In contrast, for a graph database, this data manipulation is quite simple as two lines of code without affecting the structure of data. Tensor-based models: An interesting representation of graph-oriented big data is tensor-based models, which are widely adopted models to represent arbitrary relationships in data entities and to traverse graphs BIB014 . Dealing with high-order relationships of big data is significant in many areas of information processing such as topic modeling, social network analysis, and recommender systems. Graph-oriented systems are well suited for storing hetero-dimensional data. However, for analytical purposes, tensors are gaining attention to build open-source libraries.  stated that it is useful to capture and analyze the complex relationships in data to extract more accurate information. Although there exist some efficient methods to analyze hidden variables and highly relational neural networks, the performance of tensors is beyond comparison. Scalability, accuracy, and timeliness are the reasons to prefer tensors over other methods. Based on the specifications of each data model as described above, we present their relationship with volume and varying structure of data in Fig. 5 . Key-value databases are more inclined to store each record regardless of considering completeness of data and assign a key identifier to record. However, graph databases are useful in storing well-structured, persistent objects with complex relationships. On the other hand, scalability, clustering, and data partitioning among nodes, as well as adding or removing nodes' runtime, are difficult in graph databases. Data models that support volume and scalability also have to support inconsistencies and allow storage of unstructured data over schema-less architecture. In contrast, the graph data model offers support to well-structured and complex data, but the scalability is not as much as what other data models provide. Besides data models of NoSQL databases designed as big data storage systems, we consider the type of licensing to categorize the storage mechanisms. Description of licensing is provided as the following: Open source: An open-source system is freely available for both academia and business so that it can be used and integrated with their own piece of code or application BIB012 . These systems are cost effective in terms of development and provide better quality and flexible access to even small businesses BIB006 . Proprietary: Unlike open-source systems, proprietary systems may be owned after paying a reasonable fee for their use. These systems are given with some legal terms and conditions to take care and only for own use and not to be modified or redistributed BIB006 . The source codes of such systems are usually not given to the buyer. Commercial: These systems are developed for sale. A trial part may be available free of cost but to obtain complete privilege for research and development; a user or enterprise must purchase it. Fig. 6 elaborates the categorization of big data storage technologies that are considered and further analyzed based on Brewer's theorem in a later section. The figure lists the storage technologies available for big data and presents the data model implemented by these technologies. It also shows the classification based on types of licensing, which are open source, proprietary, and commercial. Key-value systems are developed for big data storage on NoSQL databases with different storage structures. Applications where whole records need to be accessed and analyzed are referred to as key-value storage structure. For instance, DynamoDB BIB010 adopts key-value structure of data storage and gains better performance for storing and accessing unstructured, inconsistent data. Stable performance and visible resource utilization are ensured even when the querying workload varies. Scalaris BIB002 , Berkeley DB (Oracle, 2015b) , Aerospike  , Redis BIB013 , Voldemort (Voldemort, 2015) , KAI (SourceForge, 2015) , and MemcacheDB (MemcacheDB, 2015) are also key-value storage systems as detailed in the previous section. In column-oriented storage systems, data are vertically partitioned and stored as separate columns. Each vertical partition may have different or the same organization of data. In Fig. 6 , HBase (Apache Software Foundation, 2015) is shown as a columnoriented data store, which ensures a consistent view of the data every time for read/write requests. HBase is an implementation of BigTable BIB003 and developed as a NoSQL database to provide scalable storage and fault-tolerant access to its data. It is deployed on top of Hadoop and HDFS and Hypertable (HyperTable, 2015) and Cassandra BIB007  ) also belong to the column-oriented data model category. MongoDB  , Terrastore  , Rocket U2 (RocketSoftware, 2015), Qizx  ,  ,  , SimpleDB BIB001 , CouchDB  , and Riak  are document-oriented databases. HyperGraphDB BIB008 , InfiniteGraph (InfiniteGraph, 2014),  , and AllegroGraph (AllegroGraph, 2015) are graph databases. We extend graph-oriented data models and elaborate tensors as analytical models for processing and extracting information from high-dimensional big data. Tensors provide scalability when implemented on distributed systems. BIB015 have used SciDB BIB004 to implement tensor decomposition on disk rather than in memory, which minimizes I/O and processing costs. This tensor decomposition project is named TensorDB BIB016 with support of both static and dynamic decompositions. Tensors have also been used in Neo4j. From the licensing perspective, Fig. 6 Table 4 explains the taxonomy and describes the types of licensing and data models of each storage system. It also highlights the important features of these storage technologies. The technologies are distributed and are scalable, and they assure fault tolerance and efficient response to read/write operations on the data stored there. Furthermore, the table illustrates the applications of big data storage technologies. This section has provided an illustration of the taxonomy of big data storage technologies based on the data model and licensing. We have categorized these technologies according to the data model into four NoSQL systems: key-value, column-oriented, document-oriented, and graph databases. The details and applications of each data model are provided. According to the licensing method, storage technologies are categorized as open source, proprietary, and commercial. Fig. 6 shows that most of the storage systems are open-source. However, BigTable BIB003 , InfiniteGraph, and Rocket U2 (RocketSoftware, 2015) are proprietary systems, whereas DynamoDB, Qizx  , and AllegroGraph are commercial systems. Berkeley DB (Oracle, 2015b ) is the only key-value database that is available in both open-source and commercial licenses. In a later section, we analyze NoSQL distributed storage systems according to Brewer's CAP theorem. We discuss the background and importance of Brewer's theorem in analyzing distributed systems. We also list the methods adopted by these storage systems to implement consistency, replication, and partition of data. 