Online transaction processing (OLTP) and online analytical processing (OLAP) describe workload patterns, not individual products. OLTP typically involves many concurrent, short operations that read or modify small amounts of data. OLAP typically involves fewer, more computationally intensive queries that scan, join, and aggregate large datasets. The distinction helps engineers select cost-effective database types rather than treating every workload as a reason to increase the capacity of an existing database.
An online store illustrates the difference. Creating an order, reserving inventory, and recording a payment are transactional operations. They require predictable response times and appropriate consistency guarantees; related changes may need an atomic transaction. Calculating revenue by region across three years of orders is analytical work. It reads many records but may need only a few attributes, such as order date, region, and amount.
Traditional relational OLTP engines commonly use row-oriented storage, which keeps the attributes of a record together and suits indexed lookups and small updates. Analytical engines often use columnar storage, which groups values from the same column. Reading only the required columns reduces unnecessary data access, and similar values often compress effectively. Columnar storage can therefore reduce storage requirements and analytical scan costs, but it is not automatically the best choice for frequent individual record updates.
Data modeling also differs. Transactional relational schemas often use normalization to reduce duplication and preserve integrity. Analytical schemas often use fact and dimension tables, precomputed aggregates, or selective denormalization to simplify reporting. These are common design patterns rather than strict rules. A key-value database can support OLTP, and a relational database can run analytical SQL; the important question is whether its access patterns and operating costs fit the workload.
Cloud architectures often separate these workloads. An operational database handles application requests, while scheduled exports or change data capture move data into a warehouse or object-storage data lake. This separation protects transaction latency and allows analytical capacity to scale independently. However, it introduces ingestion costs, duplicate storage, pipeline maintenance, and potential data freshness delays. For a small application with occasional reports, indexed queries or a read replica may be cheaper and simpler than a dedicated warehouse.
Pricing must be evaluated against query frequency, concurrency, data volume, and latency requirements. A continuously used analytical workload may justify provisioned warehouse capacity, while occasional exploration may suit serverless queries over object storage. For scan-priced queries, compressed columnar files such as Parquet or ORC, partition pruning, and selecting only necessary columns can materially reduce charges. Excessively small files and poorly chosen partitions can undermine performance and increase overhead.
Time-series workloads add another selection dimension rather than forming a third category equivalent to OLTP and OLAP. Timestamped measurements often arrive continuously and are queried over time ranges. A purpose-built time-series database may offer useful retention policies, compression, and time-based aggregation, while long-term historical analysis may fit columnar files or a warehouse. A timestamp column alone does not justify adopting a time-series database.
Common misconceptions include assuming OLAP systems cannot provide ACID transactions, equating OLTP exclusively with relational databases, or expecting a read replica to turn a row-oriented engine into a columnar warehouse. For architecture and exam questions, identify the dominant access pattern first, then compare consistency, freshness, scaling, and total cost. Avoid building a separate analytical platform unless its performance or cost benefits justify the additional components.