메모리에 존재하는 데이터는 보존이 안된다. 그러므로 해당 앱이 종료되면 메모리에 있던 데이터들은 다시 읽을 수 없다. 그러므로 데이터를 장기적으로 보관하기위해 데이터베이스를 사용한다.
관계형 데이터 베이스란 말 그대로 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 말한다.
각각의 테이블은 컬럼과 로우(데이터)들로 구성된다. 테이블을 연결하는 이유는 여러가지가 있는데, 예를들어 하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복된다. 더 많은 디스크를 사용하게되고, 잘못된 데이터가 저장될 가능성이 높다.
- 원자성
부분적으로 실행되다가 중단되지 않는 것을 보장하는 특성이다. 예를 들어 계좌이체를 한다는 가정하에, 내 통장에서는 잔고가 빠져나갔는데 상대방 통장에서는 돈이 들어오지 않는일이 없도록 하는 특성이다.
- 일관성
트랜잭션이 성공하면 일관성있는 데이터베이스 상태로 유지한다.
- 고립성
트랜잭션을 수행시 다른 트랜잭션의 연산작업을 끼어들지 못하도록 보장하는 특성이다.
- 지속성
성공적으로 수행된 트랜잭션은 영원히 반영되어야함을 의미하는 특성이다. 모든 트랜잭션은 로그로 남고 시스템 장애 전 상태로 되돌릴 수 있다.
ACID를 제공함으로 트랜잭션 기능을 제공한다. 트랜잭션은 일련의 작업들이 모두 다 성공하거나 모두 다 실패하는것이다.
비관계형 타입의 데이터를 저장할때 주로 쓰인다. MongoDB, Redis, Cassandra 등이 있다.
sql은 데이터를 더 효율적으로, 체계적으로 저장할 수 있고 관리할 수 있다. 미리 저장하는 데이터들의 구조를 정의함으로 데이터의 완전성이 보장된다. 하지만 확장성이 쉽지 않고, 서버의 성능 자체도 높여야한다. 정형화된 데이터들, 데이터의 완전성이 중요한 데이터를 저장하는데 유리함.
반면 Nosql은 데이터의 구조변화에 유연하다. 확장하기 쉽고, 방대한 데이터를 저장하는데에 유리하다. 하지만 트랜잭션이 안되거나 불안하고, 데이터의 완정성이 보장되지 않는다. 주로 비정형화데이터, 로그데이터 같은 데이터를 저장하는데 유리하다.