Ace-T's Blog 내 검색 [네이버 커넥트 이웃 합니다~^-^/ 요청 大 환영~~]

couchbase와 같은 키/벨류의 key design??

Language/Scala 2016.04.15 10:25
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T




오픈소스로 키/벨류의 형태의 스토리지들이 많이 있다. Redis나 couchbase등이 그 예이다. 

이러한 스토리지들에 저장을할 때 고려사항으로 key를 어떤식으로 만들어야할 지 고민이 되어진다.

왜냐하면 이러한 key들은 한정되어진 범위를 가지고 있다. couchbase의 경우는 250byte로 제한을 둔다. 

또한 이러한 key들의 무결성을 보장되어야 한다. 그렇지 않으면 데이터의 유실이 발생할 수가 있다.

그래서 생각했던 것이 Hash였다. 그러나 자바진형의 String에서 제공되어지는 Hash는 중복의 염려가 있다고 한다.

그래서 SHA-1 + Base64 Encoding(urlSafe)를 선택 하였다.

아래는 스칼라 코드이며 해당 키는 아래의 소스를 통해 "IbDNShu-PGxJtnsUVuDJLv-aJoU=" 이러한 형태로 키가 만들어진다. goood~


build.sbt에는 아래와 같이 dependencies를 추가!

libraryDependencies ++= Seq(

   "me.lessis" %% "base64" % "0.2.0"

) 


import~~

import base64.Encode 


SHA-1 + Base64 Encoding(urlSafe)

val md = java.security.MessageDigest.getInstance("SHA-1")

val keyword = {

  new String(Encode.urlSafe(md.digest("스트링~~".getBytes)))

} 


- END -


저작자 표시 비영리 변경 금지
신고

'Language > Scala' 카테고리의 다른 글

couchbase와 같은 키/벨류의 key design??  (0) 2016.04.15
(기초) 스칼라 데이터 구조(컬렉션)  (0) 2016.03.25
(기초) 스칼라 문법  (0) 2016.03.25

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

(기초) 스칼라 데이터 구조(컬렉션)

Language/Scala 2016.03.25 16:19
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T




2016/03/25 - [Language/Scala] - (기초) 스칼라 문법

참고 사이트 : https://twitter.github.io/scala_school/ko/collections.html


scala> val numbers = List(1,2,3,4,5)

numbers: List[Int] = List(1, 2, 3, 4, 5)


scala> Set(1,2,2)

res20: scala.collection.immutable.Set[Int] = Set(1, 2)


scala> val hostPort = ("localhsot", 8080)

hostPort: (String, Int) = (localhsot,8080)


scala> hostPort._1

res21: String = localhsot


scala> hostPort._2

res22: Int = 8080


scala> 1->2

res23: (Int, Int) = (1,2)


scala> ("D", (1,2,3))

res25: (String, (Int, Int, Int)) = (D,(1,2,3))


scala> ("H", (4,5,6))

res26: (String, (Int, Int, Int)) = (H,(4,5,6))


scala> ("D", (1,2,3)) -> ("H", (4,5,6))

res27: ((String, (Int, Int, Int)), (String, (Int, Int, Int))) = ((D,(1,2,3)),(H,(4,5,6)))


scala> Map(1 -> 2)

res28: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)


scala> Map("foo" -> "bar")

res29: scala.collection.immutable.Map[String,String] = Map(foo -> bar)


scala> Map(1-> Map("foo" -> "bar"))

res31: scala.collection.immutable.Map[Int,scala.collection.immutable.Map[String,String]] = Map(1 -> Map(foo -> bar))


scala> numbers.map((i:Int) => i *2)

res33: List[Int] = List(2, 4, 6, 8, 10)


scala> numbers.foreach((i: Int) => i * 3)


scala> val value = numbers.foreach((i:Int) => i * 7)

value: Unit = ()


scala> def isEven(i:Int): Boolean = i % 2 == 0

isEven: (i: Int)Boolean


scala> numbers.filter(isEven _)

res37: List[Int] = List(2, 4)


scala> val numbers = List(1,2,3,4,5,6,7,8)

numbers: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)


scala> numbers.partition(_ % 2 == 0)

res39: (List[Int], List[Int]) = (List(2, 4, 6, 8),List(1, 3, 5, 7))


scala> numbers.find((i: Int) => i > 5)

res40: Option[Int] = Some(6)


scala> numbers.drop(5)

res41: List[Int] = List(6, 7, 8)


scala> numbers.dropWhile(_ %2 != 0)

res42: List[Int] = List(2, 3, 4, 5, 6, 7, 8)






저작자 표시 비영리 변경 금지
신고

'Language > Scala' 카테고리의 다른 글

couchbase와 같은 키/벨류의 key design??  (0) 2016.04.15
(기초) 스칼라 데이터 구조(컬렉션)  (0) 2016.03.25
(기초) 스칼라 문법  (0) 2016.03.25

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

(기초) 스칼라 문법

Language/Scala 2016.03.25 13:45
[Good Comment!!, Good Discussion!!, Good Contens!!]
[ If you think that is useful, please click the finger on the bottom~^-^good~ ]
by ace-T



참고 사이트 : https://twitter.github.io/scala_school/ko/basics.html


terrypark@localhost:~/program/sbt/bin$ sbt console

[info] Set current project to bin (in build file:/Users/terrypark/program/sbt/bin/)

[info] Starting scala interpreter...

[info]

Welcome to Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31).

Type in expressions to have them evaluated.

Type :help for more information.


scala>



예제 따라잡기!

scala> 1+1

res0: Int = 2


scala> val result = 1+1

result: Int = 2


scala> var name = "terry.park"

name: String = terry.park


scala> def addOne(m: Int): Int = m +1

addOne: (m: Int)Int


scala> val test = addOne(2)

test: Int = 3


scala> def threeReturn() = 1 + 2

threeReturn: ()Int


scala> threeReturn()

res1: Int = 3


scala> threeReturn

res2: Int = 3


이름없는 함수?!

scala> (x: Int) => x + 1

res3: Int => Int = <function1>


scala> (2)        <- 이렇게 하면 호출되어지나? 했지만 역시나 안됌!ㅋ 

res4: Int = 2


scala> res3(2)

res5: Int = 3


// 이름없는 함수를 다른 함수나 식에 넘기거나 val에 지정할 수 있음.

scala> val addOne = (x: Int) => x+4

addOne: Int => Int = <function1>


scala> addOne(1)

res8: Int = 5


// function timesTow(int i){ .... }  이런 내용과 같음!

scala> def timesTow(i: Int): Int = {

     | println("hello world")

     | i*2

     | }

timesTow: (i: Int)Int


scala> timesTow(2)

hello world

res9: Int = 4


// 이름없는 함수도 동일!

scala> { i:Int => println("hello~")

     | i * 2

     | }

res10: Int => Int = <function1>


scala> res10(3)

hello~

res11: Int = 6


scala> def addr(m: Int, n: Int)= m + n

addr: (m: Int, n: Int)Int


scala> val add = addr(_:Int, 4)

add: Int => Int = <function1>


scala> add(2)

res1: Int = 6


_..밑줄?!! 인자의 일부만을 사용하는 것? 

add(2)라고 한다면 인자의 값으로 2가 들어가고..add(2)는 addr(2, 4)가 되어지는것!?

그래서 addr이 m+n이니..6이라는 결과가 똭!


커리 함수(Curried functions)

scala> def multiply(m: Int)(n:Int): Int = m * n

multiply: (m: Int)(n: Int)Int


scala> multiply(2)(4)

res3: Int = 8


scala> val timesTwo = multiply(2) _

timesTwo: Int => Int = <function1>


scala> timesTwo(3)

res4: Int = 6


scala> (addr _).curried

res8: Int => (Int => Int) = <function1>


scala> def capitalizeAll(args: String*) = {

     | args.map { arg => arg.capitalize

     | }

     | }

capitalizeAll: (args: String*)Seq[String]


scala> capitalizeAll("rarity", "applejack")

res12: Seq[String] = ArrayBuffer(Rarity, Applejack)


클래스

scala> class Calculator {

     |    val brand : String = "HP"

     |    def add(m: Int, n: Int): Int = m + n

     | }

defined class Calculator


scala> val calc = new Calculator

calc: Calculator = Calculator@e7a7ed9


scala> calc.add(1,2)

res13: Int = 3


scala> calc.brand

res14: String = HP


scala> class Calculaotr(brand: String) {

     |    /**

     |     * 생성자

     |    */

     |    val color: String = if (brand == "TI") {

     |       "blue"

     |    } else if (brand == "HP") {

     |       "black"

     |    } else {

     |       "white"

     |    }

     |

     |    // 인스턴스 메소드

     |    def add(m: Int, n: Int) : Int = m + n

     | }

defined class Calculaotr


scala> val calc = new Calculaotr("HP")

calc: Calculaotr = Calculaotr@6b448973


scala> calc.color

res15: String = black


scala> class Test {

     |    val finc = { () => acc += 1}

     |    def mic = { acc += 1 }

     |    var acc = 0

     | }

defined class Test


scala> val c = new Test

c: Test = Test@6c10fc3


scala> c.mic                                // c.mic()를 호출 함.


scala> c.finc

res18: () => Unit = <function0>  // 함수 자체를 반환


메소드와 함수의 차이가 뭐지? 

val과 var의 차이는 var은 변수, val은 함수나 객체를 받아주는 것인가?

=>, _ 의 용도 정확히 모르겠다!?

aList.map(a => a.{연산}) == aList.map(_.(연산))

람다로 들어오는 파라미터 자체를 함축 사용!


일단은 그냥 GO!  문법은 여기까쥐~


  - 끝 -

저작자 표시 비영리 변경 금지
신고

'Language > Scala' 카테고리의 다른 글

couchbase와 같은 키/벨류의 key design??  (0) 2016.04.15
(기초) 스칼라 데이터 구조(컬렉션)  (0) 2016.03.25
(기초) 스칼라 문법  (0) 2016.03.25

acet 박태하가 추천하는 readtrend 추천글!

설정

트랙백

댓글

:::: facebook을 이용하시는 분들은 로그인 후 아래에 코멘트를 남겨주세요 ::::

티스토리 툴바