MS-SQL Select random rows from Table

머신러닝 혹은 딥 러닝 학습을 하기 위해서는 우선 학습할 데이터를 탐색해 보아야 한다. 만약, 많은 양의 Row 데이터를 가지고 있는 SQL Table을 가지고 해야 한다면 일부 표본만 추출해서 테스트를 해보는 것이 필요하다.

이런 경우 테이블에서 랜덤으로 데이터를 추출할 때 다음 Query를 사용하면, 간단하게 일정 비율로 랜덤한 데이터를 추출해 낼 수 있다.

select top 10 percent * from [Table Name] order by newid()

No-SQL Database 란?

No-SQL (Not only SQL) 시작

1998년 카를로 스트로찌(Carlo Strozzi)라는 엔지니어가 공개한 표준 SQL 인터페이스를 채용하지 않은 자신의 경량 Open Source 관계형 데이터베이스를 No-SQL이라고 명명한데서 유래되었다고 한며, 이후 2009년에는 요한 오스칼손(Johan Oskarsson)이라는 엔지니어가 Open Source기반의 분산 데이터베이스 관련 행사를 준비하면서 No-SQL이라는 용어를 널리 사용하기 시작하였다고 한다.​

초기 No-SQL은 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID(Atomicity, Consistency, Isolation, Durability) 특성을 제공하지 않았다. 때문에 No-SQL이 등장한 이후에도 시장에서는 관계형 데이터베이스가 데이터를 처리하는데 가장 최적의 시스템으로 받아들여졌다.

기업 데이터의 정확한 처리가 필수적이기 때문에 기업 시스템에서는 현재도 관계형 데이터베이스를 훨씬 많이 사용한다. 무엇보다도 표준 SQL 이라고 하는 데이터를 처리하는 언어의 편이성 때문에 No-SQL 등 다른 데이터베이스 시스템들은 많이 활용 되지 않았다.​

2000년 후반으로 넘어오면서 인터넷이 활성화되고, 소셜네트워크 서비스(SNS)등이 등장하면서 관계형 데이터 또는 정형데이터가 아닌 데이터, 즉 비정형데이터라는 것을 보다 쉽게 담아서 저장하고 처리할 수 있는 구조를 가진 데이터 베이스들이 관심을 받게 되었고, 해당 기술이 점점 더 발전하게 되면서, No-SQL 데이터베이스가 각광을 받기 시작했다.

기존의 관계형 데이터베이스 보다 더 융통성 있는 데이터 모델이 요구되며, 데이터의 저장 및 검색을 위한 특화된 매커니즘이 필요 해지기 시작했고, No-SQL은 단순 검색 및 추가 작업에 있어서 매우 최적화된 키 값 저장 기법을 사용하여, 응답속도나, 처리 효율 등에 있어서 매우 뛰어난 성능을 내주면서, 비정형 데이터를 다루는 SNS, 머신러닝 등 AI 산업에 많이 사용되기 시작했다.

SQL VS No-SQL

SQLVSNo-SQL
정해진 규격에 의한 정적 정의Schema정해진 규격 없음. 동적 정의
가능Data Join불가능
표준SQL비표준
보장Transcation미보장
어려움Distribute쉬움

No-SQL 종류

1. Key-Value DB

  • Key와 Value의 쌍으로 데이터가 저장되는 가장 단순한 형태이다.
    (ex) Dictionary, Hash 자료 구조
  • 데이터를 하나의 불투명한 컬렉션으로 처리하며 각 레코드마다 각기 다른 필드를 가질 수 있는 Column Family 데이터 모델이다.
  • 선택적인 값들이 대부분의 DB에서처럼 placeholder로 표현되지 않기 때문에 Key-Value DB는 동일한 데이터베이스 저장을 위해 메모리를 훨씬 덜 사용하기도 하므로 특정한 부하에서 큰 성능 상의 이점이 있을 수 있다.

2. Wide Column DB

  • Key-Value DB에서 발전된 형태의 Column Family 데이터 모델을 사용한다.
  • 하나의 Row Key 안에 다양한 컬럼과 값을 저장 할 수 있도록 한다.
  • 대량의 데이터의 압축, 분산처리, 집계 쿼리 (SUM, COUNT, AVG 등)및 쿼리 동작 속도 그리고 확장성이 뛰어나다.

3. Document(-oriented) DB

  • 문서 데이터베이스는 JSON/XML 유사 형식의 문서로 데이터를 저장 및 쿼리하도록 설계된 비관계형 데이터베이스 유형으로 트리형 구조로 레코드를 저장하거나 검색하는 것에 효과적이다.

4. Graph DB

  • 18세기 오일러의 그래프 이론에서 시작되었다.
  • 데이터를 노드로 표현하며 노드 사이의 관계를 엣지로 표현한다.
  • 기존의 RDB로는 표현하기 어려웠던 각 데이터간의 연결점들을 이어주고 표현(Visualizing)해주는데 용이하다.

Inverted Search Index

검색엔진에서 많이 사용하는 방법인데, 검색엔진은 사이트의 모든 페이지를 검색 로봇이 검색해서 문서내의 단어들을 색인하여 URL에 맵핑해서 저장해놓는다.

Key Value
bcho.tistory.com/nosqlnosql, cassandra, riak
bcho.tistory.com/cloudamazon, azure, google
facebook.com/group/serversideamazon, google, riak
highscalability.com/bigdatanosql, riak
http://www.basho.com/riakriak

검색은 단어를 키로 검색이 되기 때문에, 위의 테이블 구조에서는 value에 검색 키워드들이 들어가 있기 때문에, 효과적인 검색을 할 수 없다.이 검색 키워드를 키로 해서 URL을 value로 하는 테이블을 다시 만들어 보면, 아래와 같은 식으로 표현되고, 검색 키워드로 검색을 하면 빠르게, 검색 키워드를 가지고 있는 URL을 찾아낼 수 있다.

KeyValue
riak bcho.tistory.com/nosql
facebook.com/group/serverside
highscalability.com/bigdata
http://www.basho.com/riak
nosql bcho.tistory.com/nosql
highscalability.com/bigdata

이렇게 value의 내용을 key로 하고, key의 내용을 반대로 value로 하는 패턴을 inverted search index라고 한다.