cassandra의 null의 개념은 '없다'를 의미하고..


관계형 데이터베이스에서의 null은 정의하지 않음(미지의 값)을 의미한다.



 SELECT * FROM "profiles" WHERE "location" IS NULL;

SyntaxException: line 1:42 mismatched input 'NULL' expecting K_NOT (...FROM "users" WHERE "location" IS [NULL]...)




참조


https://ko.wikipedia.org/wiki/Null_(SQL)



수학적 연산[편집]

널은 데이터 값이 아니라, 미지의 값에 대한 표시일 뿐이기 때문에, Null에 수학적 연산을 사용하는 것은 미지의 값으로 나타난다.[4] 아래의 예에서, 10을 Null에 곱하면 결과값은 Null이 된다.:

10 * NULL          -- 결과는 NULL

이것은 예기치 않은 결과를 야기한다. 예를 들어, 널을 0으로 나누려 한다면, 플랫폼은 ‘0으로 나눈’ 예상된 데이터 예외값을 던지는 대신, 널 값을 반환한다.[4] 비록 이러한 행위가 ISO SQL 표준으로 정의되어 있지는 않지만, 많은 DBMS 벤더들이 이러한 연산을 유사하게 다룬다. 예를 들어, 오라클, PostgreSQL, MySQL 서버, 그리고 마이크로소프트 SQL 서버 플랫폼은 모두 널 값을 아래와 같이 반환한다 :

NULL / 0



Posted by '김용환'
,


APM하면 apache, php, mysql이 떠오르듯이 


최근에 외국에서 SMACK 이라는 스택이 떠오르고 있는데, 이는 spark, mesos, akka, cassandra, kafka로 이루어진 스택을 의미한다. 


신선한 즐거움을 준 책이다.  특히 마지막 3장 사용 사례는 나에게는 충격이었다. 버전이 낮긴 하지만, 중요치 않았다.



Spark + Mesos + Cassandra의 알싸한 조합!!!






https://www.amazon.com/Fast-Processing-Systems-SMACK-Stack/dp/1786467208/


https://www.packtpub.com/big-data-and-business-intelligence/fast-data-processing-systems-smack-stack



## 2017년 12월 1일 추가 내용


http://www.acornpub.co.kr/book/data-processing-smackstack




역자 내용.

"서버 개발자의 입장에서는 웹서비스든, 앱서비스든 단순히 서버를 개발하는 것만으로는 서비스가 완성되지 않는다. 서비스 개발이 완성됐다 하더라도 고객문의(CS), 시스템 모니터링 등 데브옵스 업무 등이 남아 있다. 서비스 데이터 또는 로그를 백엔드에 전달해 모니터링뿐 아니라 사용자의 활동 지표로 활용하기도 하고, 머신 러닝을 활용해 추천 친구나 추천 시스템을 개발하기도 한다.

서비스 로그를 파일로 저장한 후 파일 데이터를 옮겨 빅데이터 저장소에 해당 서비스 로그를 저장하는 아키텍처를 데이터 파이프라인(data pipeline)이라고 한다. 데이터 파이프라인 처리 아키텍처에서는 멀티 테넌시(multi-tenancy), 확장, 대용량 처리, 실시간 데이터 처리를 지원해야 한다. 또한 저장된 빅데이터 저장소를 기반으로 실시간 분석 및 대용량 처리를 하고 지표, 모니터링, 추천 시스템으로 활용해서 사용자의 재방문률을 높일 수 있는 인사이트를 얻어야 한다.


처음에는 데이터 파이프라인과 데이터 분석이 무척 낯설 수 있다. 나도 처음부터 파이프라인과 데이터 분석을 시작한 것이 아니라서 많이 낯설었지만, 회사에서 업무를 진행하면서 조금씩 알아가고 있다. 외국에서는 데이터 파이프라인과 분석을 완벽히 해결할 수 있는 방법으로 하나의 오픈소스가 아닌 여러 오픈소스를 묶어(스택) 데이터 프로세싱을 처리하기 위한 다양한 시도를 하고 있다.


이런 흐름 속에서 2016년, 샌프란시스코 베이 에어리어(San Francisco Bay Area)의 데이터 엔지니어링 회의 및 컨퍼런스에서 "Spark, Mesos, Akka, Cassandra, Kafka Laying down the SMACK on your datapipelines"(링크: https://goo.gl/ny5Lwm, 발표 동영상: http://goo.gl/XVuxj8)라는 주제가 발표됐다. 이런 발표의 영향을 받아 관련 내용이 본 도서로 출판하게 됐다. 이 책에서는 데이터 인메모리(in-memory) 분산 컴퓨팅 기능이 포함된 스파크(Spark), 클러스터 OS(Cluster OS), 분산 시스템 관리, 스케줄링, 확장 기능이 포함된 메소스(Mesos), 스칼라 언어의 액터 모델의 구현인 아카(Akka), 영속성 계층인 noSQL 데이터베이스인 카산드라(Cassandra), 분산 스트리밍 플랫폼(메시지 브로커)인 카프카(Kafka)를 기반으로 데이터 파이프라인 아키텍처를 구성하는 SMACK 스택을 소개하고 있다.



이 책은 SMACK 스택을 전혀 모르는 개발자를 위한 책이다. 개별 컴포넌트를 쉽게 설명했고, 파이프라인 스택에 대한 아키텍처를 배우기에 적절하다. 특히 마지막 3장은 사례를 통해 SMACK 스택을 기반으로 하는 아키텍처를 배울 수 있다."




2017년 12월에 출간된다. - SMACK 스택을 이용한 빠른 데이터 처리 시스템










오랄리 페이지에서도 SMACK을 소개하면 좋으니 참고하면 좋을 듯 하다.


https://www.oreilly.com/ideas/the-smack-stack






Posted by '김용환'
,



Mastering Elasticsearch 5.x 는 일래스틱서치 5.x에 대한 설명을 담은 책이다. 


예제 단위로 하나씩 설명한 책은 아니고 일래스틱서치를 어느 정도 다룬 개발자나 운영자가 보면 재미있어할 만한 책인 듯 하다. 


(언제 나올라나..)



https://www.amazon.com/Mastering-Elasticsearch-5-x-Bharvi-Dixit/dp/1786460181





에이콘 출판사 기준 주간 9위까지 올라갔다. 





Posted by '김용환'
,



쉘 프로그래밍(Shell programing)에 관련된 책이지만 쉽지만 튼튼하게 설명된 책이다.


단순히 써보는 수준이 아니라 깊은 통찰력을 주는 책인듯 하다.


역시 내가 모르는 내용이 있었다!!! 끝없이 겸손하게 공부해야겠다는 생각이 들었다. 




https://www.amazon.com/Shell-Programming-Unix-Linux-Developers/dp/0134496000





Posted by '김용환'
,


Scala High Performance Programming 책은 scala로 주식 트레이드 시스템을 개발한 한 저자가 쓴 책이다.


책은 괜찮았고 작년에 번역은 완료했다. 


자바 개발자가 스칼라를 공부할 때 함께 보면 좋을 것 같다. 스칼라 필독서 중 하나라 생각한다. 



언제 번역본이 나올라나..



https://www.amazon.com/Scala-Performance-Programming-Vincent-Theron/dp/178646604X







Posted by '김용환'
,



Devops 조직에는 주번이라는 제도가 있는데, 영어로 oncall이다. 


이런 주번 시스템을 링크드인에서 사용하고 있는데, 이를 오픈소스로 선보였다.




https://engineering.linkedin.com/blog/2017/06/open-sourcing-iris-and-oncall


https://oncall.tools/



Posted by '김용환'
,



scala에서 Stream은 lazy하게 계산되는 리스트이다. 


Stream에서 concat을 하려면 :: 이 아니라 #::을 사용한다. 



scala> val stream = 1 #:: 2 #:: 3 #:: Stream.empty

stream: scala.collection.immutable.Stream[Int] = Stream(1, ?)



실행 예제이다.


scala> def fibFrom(a: Int, b: Int): Stream[Int]  = a #:: fibFrom(b, a + b)

fibFrom: (a: Int, b: Int)Stream[Int]



여기서 엄청 큰 수를 넣어도 Stream(1, ?로 나타난다. 


scala> val fibs = fibFrom(1, 1).take(3)

fibs: scala.collection.immutable.Stream[Int] = Stream(1, ?)


scala> fibs.toList

res0: List[Int] = List(1, 1, 2)



또 다른 예제이다.'

scala> def from(n: Int): Stream[Int] = n #:: from(n+1)

from: (n: Int)Stream[Int]


scala>  val nats = from(0)

nats: Stream[Int] = Stream(0, ?)


scala>     val m4s = nats map (_ * 4)

m4s: scala.collection.immutable.Stream[Int] = Stream(0, ?)





실제 m4s에 매개 변수가 길더라도 lazy라서 아직 계산되지 않았다.


scala> m4s take 10000000

res2: scala.collection.immutable.Stream[Int] = Stream(0, ?)



실제 수행되는 시점에 toList를 호출한다.


scala> (m4s take 10000000).toList.drop(3)




Posted by '김용환'
,