Cassandra
 /
 Hector오픈소스
 프로젝트전성욱
 (allnewangel@gmail.com)13년 6월 18일 화요일
카산드라
 소개l Cassandra는
 Key-Value
 구조의
 DBMS.l 구글의
 BigTable
 컬럼
 기반의
 데이타
 모델과
 Amazon
 Dynamo의
 분산
 모델을
 기반으로
 제작l Facebook에
 의해
Upcoming SlideShare
Loading in …5
×

Cassandra

1,173 views
1,020 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,173
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
29
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Cassandra

  1. 1. Cassandra
  2. 2.  /
  3. 3.  Hector오픈소스
  4. 4.  프로젝트전성욱
  5. 5.  (allnewangel@gmail.com)13년 6월 18일 화요일
  6. 6. 카산드라
  7. 7.  소개l Cassandra는
  8. 8.  Key-Value
  9. 9.  구조의
  10. 10.  DBMS.l 구글의
  11. 11.  BigTable
  12. 12.  컬럼
  13. 13.  기반의
  14. 14.  데이타
  15. 15.  모델과
  16. 16.  Amazon
  17. 17.  Dynamo의
  18. 18.  분산
  19. 19.  모델을
  20. 20.  기반으로
  21. 21.  제작l Facebook에
  22. 22.  의해
  23. 23.  2008년에
  24. 24.  오픈소스로
  25. 25.  공개된
  26. 26.  분산
  27. 27.  데이터
  28. 28.  베이스l 2009년
  29. 29.  3월
  30. 30.  아파치의
  31. 31.  인큐베이터,
  32. 32.  1년
  33. 33.  만인
  34. 34.  2010년
  35. 35.  2월
  36. 36.  Top-level
  37. 37.  아파치
  38. 38.  프로젝트가
  39. 39.  됨l Amazon의
  40. 40.  Dynamo의
  41. 41.  특징인
  42. 42.  Hash알고리즘을
  43. 43.  이용한
  44. 44.  Key-Value
  45. 45.  스토리지,
  46. 46.  Eventual
  47. 47.  Consistency
  48. 48.  구조를
  49. 49.  가지고
  50. 50.  있으면서
  51. 51.  논리
  52. 52.  구조로
  53. 53.  Google의
  54. 54.  BigTable
  55. 55.  구조인
  56. 56.  계층적
  57. 57.  Column
  58. 58.  구조를
  59. 59.  배경으로
  60. 60.  하고
  61. 61.  있음.213년 6월 18일 화요일
  62. 62. 주요
  63. 63.  특징l 토큰링을
  64. 64.  배경으로
  65. 65.  Key
  66. 66.  구간
  67. 67.  설정으로
  68. 68.  서버(노드)의
  69. 69.  추가
  70. 70.  및
  71. 71.  제거만으로
  72. 72.  전체
  73. 73.  저장
  74. 74.  공간이
  75. 75.  유연하게
  76. 76.  확장/축소
  77. 77.  됨l 다른
  78. 78.  서버(노드)에
  79. 79.  데이터
  80. 80.  복제본을
  81. 81.  구성하여
  82. 82.  특정
  83. 83.  노드
  84. 84.  장애시에도
  85. 85.  서비스에
  86. 86.  영향을
  87. 87.  주지
  88. 88.  않고
  89. 89.  데이터
  90. 90.  유실
  91. 91.  방지l Key-Value
  92. 92.  구조로
  93. 93.  Hash
  94. 94.  알고리즘을
  95. 95.  통한
  96. 96.  O(1)접근으로
  97. 97.  빠른
  98. 98.  엑세스l Write(수정/추가/삭제)시
  99. 99.  실제
  100. 100.  스토리지
  101. 101.  구조에
  102. 102.  적용
  103. 103.  전
  104. 104.  CommitLog에
  105. 105.  변경사항을
  106. 106.  먼저
  107. 107.  기록
  108. 108.  빠른
  109. 109.  성능을
  110. 110.  보임
  111. 111.  (MySQL
  112. 112.  대비
  113. 113.  8~15배)l 엄격한
  114. 114.  Schema
  115. 115.  적용않음
  116. 116.  (Row마다
  117. 117.  속성을
  118. 118.  다르게정의가능)l 산술/자료
  119. 119.  처리
  120. 120.  함수들을
  121. 121.  모두
  122. 122.  지원하지는
  123. 123.  않음313년 6월 18일 화요일
  124. 124. 주요
  125. 125.  특징l 사전에
  126. 126.  정의해
  127. 127.  놓은
  128. 128.  Entity에
  129. 129.  대한
  130. 130.  JOIN지원
  131. 131.  않음(응용
  132. 132.  환경에서
  133. 133.  구현)l 1차
  134. 134.  인덱스는
  135. 135.  Column
  136. 136.  Family의
  137. 137.  Column이름을
  138. 138.  기반
  139. 139.  (2차
  140. 140.  인덱스는
  141. 141.  Column의
  142. 142.  Value)l 사전
  143. 143.  정해진
  144. 144.  인덱스에
  145. 145.  대해서만
  146. 146.  정렬
  147. 147.  수행
  148. 148.  가능(1차
  149. 149.  :
  150. 150.  Column명,
  151. 151.  2차
  152. 152.  :
  153. 153.  Column
  154. 154.  값)l 데이터
  155. 155.  전송
  156. 156.  프로토콜로
  157. 157.  Thrift를
  158. 158.  이용.
  159. 159.  Thrift는
  160. 160.  Facebook에서
  161. 161.  시작된
  162. 162.  프로젝트로
  163. 163.  Cross-Language를
  164. 164.  지원하여
  165. 165.  언어에
  166. 166.  의존성
  167. 167.  없이
  168. 168.  모든
  169. 169.  환경에서
  170. 170.  이용
  171. 171.  가능l 물리
  172. 172.  파일
  173. 173.  저장
  174. 174.  구조로
  175. 175.  SSTable을
  176. 176.  사용413년 6월 18일 화요일
  177. 177. 논리
  178. 178.  스토리지
  179. 179.  구조l Column은
  180. 180.  name,
  181. 181.  value,
  182. 182.  timestamp로
  183. 183.  구성l ColumnFamily는
  184. 184.  RDBMS의
  185. 185.  Table과
  186. 186.  비슷한
  187. 187.  구성l Keyspace는
  188. 188.  CF의
  189. 189.  모임l Cluster는
  190. 190.  최상위
  191. 191.  개념으로
  192. 192.  Keyspace의
  193. 193.  모임513년 6월 18일 화요일
  194. 194. 물리
  195. 195.  스토리지
  196. 196.  구조l Node는
  197. 197.  하나의
  198. 198.  서버에
  199. 199.  구동되고
  200. 200.  있는
  201. 201.  Cassandra
  202. 202.  서버
  203. 203.  프로세스
  204. 204.  하나가
  205. 205.  Node.l Seoul에
  206. 206.  2개,
  207. 207.  Busan에
  208. 208.  2개의
  209. 209.  노드로
  210. 210.  논리
  211. 211.  스토리지
  212. 212.  구조에서는
  213. 213.  Cluster라는
  214. 214.  확장
  215. 215.  공간으로
  216. 216.  사용613년 6월 18일 화요일
  217. 217. 저장
  218. 218.  구성713년 6월 18일 화요일
  219. 219. 무결성
  220. 220.  유지l Cassandra와
  221. 221.  같은
  222. 222.  NoSQL은
  223. 223.  보통
  224. 224.  CAP(Brewer의
  225. 225.  이론)로
  226. 226.  무결성
  227. 227.  유지– C
  228. 228.  :
  229. 229.  Consistency
  230. 230.  (무결성)– A
  231. 231.  :
  232. 232.  Availability
  233. 233.  (가용성)– P
  234. 234.  :
  235. 235.  Partition
  236. 236.  tolerance
  237. 237.  (분할에
  238. 238.  대한
  239. 239.  내구성
  240. 240.  :
  241. 241.  분할
  242. 242.  처리)l 보통은
  243. 243.  2가지를
  244. 244.  만족하고
  245. 245.  1가는
  246. 246.  상황에
  247. 247.  의해
  248. 248.  만족.
  249. 249.  Cassandra의
  250. 250.  경우
  251. 251.  AP를
  252. 252.  만족.
  253. 253.  l C의
  254. 254.  경우
  255. 255.  Eventual
  256. 256.  Consistency에
  257. 257.  의해
  258. 258.  만족.
  259. 259.  즉
  260. 260.  노드
  261. 261.  구성
  262. 262.  및
  263. 263.  읽고
  264. 264.  쓸때의
  265. 265.  Consistency판단에
  266. 266.  따라
  267. 267.  달라짐.813년 6월 18일 화요일
  268. 268. 캐싱
  269. 269.  지원l 각
  270. 270.  CF마다
  271. 271.  Row
  272. 272.  Cache와
  273. 273.  Key
  274. 274.  Cache를
  275. 275.  설정l Row
  276. 276.  Cache는
  277. 277.  실제
  278. 278.  데이터를
  279. 279.  메모리에
  280. 280.  적재해
  281. 281.  놓는
  282. 282.  것을
  283. 283.  
  284. 284.  
  285. 285.  
  286. 286.  의미l Key
  287. 287.  Cache는
  288. 288.  Key를
  289. 289.  캐싱해
  290. 290.  놓는
  291. 291.  것을
  292. 292.  의미l 가장
  293. 293.  기본적인
  294. 294.  형태로
  295. 295.  캐싱을
  296. 296.  지원913년 6월 18일 화요일
  297. 297. Hector
  298. 298.  소개l Cassandra를
  299. 299.  위한
  300. 300.  하이
  301. 301.  레벨
  302. 302.  객체
  303. 303.  지향
  304. 304.  인터페이스를
  305. 305.  제공l 좀
  306. 306.  더
  307. 307.  높은
  308. 308.  레벨의
  309. 309.  깔끔한
  310. 310.  API를
  311. 311.  제공하는
  312. 312.  Java
  313. 313.  Client.l 대표적
  314. 314.  지원
  315. 315.  특징– 커넥션
  316. 316.  풀링
  317. 317.  지원– Failover
  318. 318.  지원l FAIL_FAST
  319. 319.  (재시도
  320. 320.  없음,
  321. 321.  에러
  322. 322.  발생시
  323. 323.  바로
  324. 324.  실패)l ON_FAIL_TRY_ONE_NEXT_AVAILABLE
  325. 325.  (포기하기
  326. 326.  전
  327. 327.  다른
  328. 328.  호스트에
  329. 329.  한번
  330. 330.  더
  331. 331.  시도)l ON_FAIL_TRY_ALL_AVAILABLE
  332. 332.  (포기하기
  333. 333.  전
  334. 334.  모든
  335. 335.  호스트에
  336. 336.  시도,
  337. 337.  기본값)– 기본적인
  338. 338.  로드
  339. 339.  밸런싱
  340. 340.  지원l LeastActiveBalancingPolicyl RoundRobinBalancingPolicy
  341. 341.  (기본값)l DynamicLoadBalancingPolicy– 통계의
  342. 342.  가용성,
  343. 343.  광범위한
  344. 344.  로깅,
  345. 345.  폴링
  346. 346.  구성,
  347. 347.  Thrift
  348. 348.  캡슐화,
  349. 349.  모듈화
  350. 350.  등1013년 6월 18일 화요일
  351. 351. Hector
  352. 352.  Pool
  353. 353.  Architecture1113년 6월 18일 화요일
  354. 354. Hector
  355. 355.  Use12CassandraHostConfigurator 설정 및 생성HFactory를 이용한 Cluster 생성내부 Background 서비스 생성HFactory를 이용한 Keyspace 생성Query를 생성select 수행Mutator를 생성insert, delete 수행13년 6월 18일 화요일
  356. 356. CassandraHostConfigurator13설정 내용 기본값maxActive 활성클라이언트의 최대수. 임계 값을 치는 동작은 exhaustedPolicy에 의함 50maxWaitTimeWhenExhausted 사용 가능한 클라이언트가 없는 경우 대기할 최대 시간 -1(무한대기)useThriftFramedTransportThrift의 프레임전송을 활성화 (TRUE의 경우, 해당설정은 카산드라 storage.conf를 설정해야 함)FALSEuseSocketKeepalive 내부 소켓에 SO_KEEPALIVE 사용 FALSEcassandraThriftSocketTimeout 소켓 Timeout은 기본 Thrift전송에 0을 설정 (제한 없음)retryDownedHosts 자동으로 백그라운드 스레드에서 마크 다운된 호스트를 다시 시도 TRUEretryDownedHostDelayInSeconds 재시도까지 사이의 시간 (초)을 대기 30autoDiscoverHosts TRUE인 경우, 자동으로 시작시 링에 있는 모든 호스트를 검색 FALSEautoDiscoverDelayInSeconds 새로운 호스트를 검사하는 동안에 대기하는 시간 (초) 30 (기본 비활성화)runAutoDiscoveryAtStartup Hector가 시작될 때 즉시 자동 검색 서비스를 실행 FALSEuseHostTimeoutTracker 트랙은 일정 기간동안 특정 호스트로 부터 받은 HTimeoutExceptions FALSE13년 6월 18일 화요일
  357. 357. NodeAutoDiscoveryService(노드의
  358. 358.  자동
  359. 359.  검색)l 자동으로
  360. 360.  링에
  361. 361.  있는
  362. 362.  모든
  363. 363.  노드를
  364. 364.  가지고
  365. 365.  와서
  366. 366.  동일한
  367. 367.  설정을
  368. 368.  적용.l 이
  369. 369.  기능은
  370. 370.  특정
  371. 371.  하드웨어
  372. 372.  및
  373. 373.  네트워크
  374. 374.  구성에서
  375. 375.  제대로,
  376. 376.  또는
  377. 377.  동작하지
  378. 378.  않는
  379. 379.  몇
  380. 380.  가지
  381. 381.  제한
  382. 382.  을
  383. 383.  가지고
  384. 384.  있어서
  385. 385.  기본적으로
  386. 386.  비활성화l 이
  387. 387.  기능은
  388. 388.  사용하려면
  389. 389.  autoDiscoverHosts와
  390. 390.  autoDiscoverDelayInSeconds가
  391. 391.  설정되어야
  392. 392.  함.l 시작시
  393. 393.  즉시
  394. 394.  동작시는
  395. 395.  runAutoDiscoveryAtStartup
  396. 396.  옵션을
  397. 397.  TRUE로
  398. 398.  설정1413년 6월 18일 화요일
  399. 399. CassandraHostRetryService(자동
  400. 400.  실패
  401. 401.  호스트
  402. 402.  재시도)l 발견된
  403. 403.  호스트를
  404. 404.  유지l 설정된
  405. 405.  간격으로
  406. 406.  재시도를
  407. 407.  하는
  408. 408.  고가용성
  409. 409.  기능l 기본적으로
  410. 410.  30초(기본값)
  411. 411.  간격으로
  412. 412.  재시도l 기존에
  413. 413.  Connection을
  414. 414.  체크,
  415. 415.  Down된
  416. 416.  Host의
  417. 417.  재연결
  418. 418.  시도1513년 6월 18일 화요일
  419. 419. Defining
  420. 420.  Consistency
  421. 421.  Levell HFactory의
  422. 422.  Keyspace
  423. 423.  생성
  424. 424.  시에
  425. 425.  설정l 카산드라처럼
  426. 426.  Hector도
  427. 427.  다른
  428. 428.  ConsistencyLevel을
  429. 429.  사용가능l 지원
  430. 430.  Consistency
  431. 431.  Level– ANY
  432. 432.  :
  433. 433.  일부
  434. 434.  Replica가
  435. 435.  응답할
  436. 436.  때
  437. 437.  까지
  438. 438.  기다림– ONE
  439. 439.  :
  440. 440.  하나의
  441. 441.  Replica가
  442. 442.  응답할
  443. 443.  때
  444. 444.  까지
  445. 445.  기다림– TWO
  446. 446.  :
  447. 447.  두
  448. 448.  개의
  449. 449.  Replica가
  450. 450.  응답할
  451. 451.  때
  452. 452.  까지
  453. 453.  기다림– THREE
  454. 454.  :
  455. 455.  세
  456. 456.  개의
  457. 457.  Replica가
  458. 458.  응답할
  459. 459.  때
  460. 460.  까지
  461. 461.  기다림– LOCAL_QUORUM
  462. 462.  :
  463. 463.  연결이수립된
  464. 464.  데이터센터에서quorum을기다림– EACH_QUORUM
  465. 465.  :
  466. 466.  각
  467. 467.  데이터센터에서
  468. 468.  quorum을
  469. 469.  기다림– QUORUM
  470. 470.  :
  471. 471.  Replica의
  472. 472.  quorum을
  473. 473.  기다림(데이터센터에
  474. 474.  상관없이)– ALL
  475. 475.  :
  476. 476.  클라이언트에
  477. 477.  반환하기
  478. 478.  전에
  479. 479.  모든
  480. 480.  Replica를
  481. 481.  차단함.l 기본값은
  482. 482.  QUORUMl Hector는
  483. 483.  CF에
  484. 484.  대해
  485. 485.  작업
  486. 486.  유형별로
  487. 487.  Level을
  488. 488.  설정할
  489. 489.  수
  490. 490.  있음
  491. 491.  (읽기,
  492. 492.  쓰기)1613년 6월 18일 화요일
  493. 493. 단일
  494. 494.  행에
  495. 495.  대한
  496. 496.  처리
  497. 497.  샘플/**
  498. 498.  *
  499. 499.  Insert
  500. 500.  a
  501. 501.  Single
  502. 502.  Row
  503. 503.  with
  504. 504.  a
  505. 505.  Single
  506. 506.  Column
  507. 507.  */MutatorString  mutator  =  HFactory.createMutator(keyspace,  stringSerializer);mutator.insert(jsmith,  Standard1,  HFactory.createStringColumn(first,  John));/**
  508. 508.  *
  509. 509.  Retrieve
  510. 510.  a
  511. 511.  Single
  512. 512.  Column
  513. 513.  */ColumnQueryString,  String,  String  columnQuery  =        HFactory.createStringColumnQuery(keyspace);columnQuery.setColumnFamily(Standard1).setKey(jsmith).setName(first);QueryResultHColumnString,  String  result  =  columnQuery.execute();/**
  514. 514.  *
  515. 515.  Removing
  516. 516.  a
  517. 517.  Single
  518. 518.  Column
  519. 519.  */mutator.delete(jsmith,  Standard1,  first,  stringSerializer);1713년 6월 18일 화요일
  520. 520. 다중
  521. 521.  행에
  522. 522.  대한
  523. 523.  처리
  524. 524.  샘플
  525. 525.  1/**
  526. 526.  *
  527. 527.  Insert
  528. 528.  Multiple
  529. 529.  Columns
  530. 530.  with
  531. 531.  Mutator
  532. 532.  */mutator.addInsertion(jsmith,  Standard1,HFactory.createStringColumn(first,  John)).addInsertion(jsmith,  Standard1,  HFactory.createStringColumn(last,  Smith)).addInsertion(jsmith,  Standard1,  HFactory.createStringColumn(middle,  Q));mutator.execute();/**
  533. 533.  *
  534. 534.  Retrieving
  535. 535.  Multiple
  536. 536.  Columns
  537. 537.  with
  538. 538.  SliceRange
  539. 539.  */SliceQueryString,  String  q  =  HFactory.createSliceQuery(ko,  se,  se,  se);q.setColumnFamily(cf).setKey(jsmith).setColumnNames(first,  last,  middle);ResultColumnSliceString,  String  r  =  q.execute();1813년 6월 18일 화요일
  540. 540. 다중
  541. 541.  행에
  542. 542.  대한
  543. 543.  처리
  544. 544.  샘플
  545. 545.  2/**
  546. 546.  *
  547. 547.  Deleting
  548. 548.  Multiple
  549. 549.  Columns
  550. 550.  with
  551. 551.  Mutator
  552. 552.  */mutator.delete(jsmith,  Standard1,  null,  stringSerializer);mutator.addDeletion(jsmith,  Standard1,  middle,  stringSerializer).addDeletion(jsmith,  Standard1,  last,  stringSerializer).execute();/**
  553. 553.  *
  554. 554.  Getting
  555. 555.  Multiple
  556. 556.  Rows
  557. 557.  with
  558. 558.  MultigetSliceQuery
  559. 559.  */MultigetSliceQueryString,  String,  String  multigetSliceQuery  =        HFactory.createMultigetSliceQuery(keyspace,  stringSerializer,  stringSerializer,  stringSerializer);multigetSliceQuery.setColumnFamily(Standard1);multigetSliceQuery.setKeys(fake_key_0,  fake_key_1,        fake_key_2,  fake_key_3,  fake_key_4);multigetSliceQuery.setRange(,  ,  false,  3);ResultRowsString,  String,  String  result  =  multigetSliceQuery.execute();1913년 6월 18일 화요일
  560. 560. 다중
  561. 561.  행에
  562. 562.  대한
  563. 563.  처리
  564. 564.  샘플
  565. 565.  3/**
  566. 566.  *
  567. 567.  Getting
  568. 568.  Multiple
  569. 569.  Rows
  570. 570.  with
  571. 571.  RangeSlicesQuery
  572. 572.  */RangeSlicesQueryString,  String,  String  rangeSlicesQuery  =HFactory.createRangeSlicesQuery(keyspace,  stringSerializer,  stringSerializer,  stringSerializer);rangeSlicesQuery.setColumnFamily(Standard1);rangeSlicesQuery.setKeys(fake_key_0,  fake_key_4);rangeSlicesQuery.setRange(,  ,  false,  3);ResultOrderedRowsString,  String,  String  result  =  rangeSlicesQuery.execute();2013년 6월 18일 화요일
  573. 573. 사용시
  574. 574.  고려사항l Mutator
  575. 575.  클래스
  576. 576.  내에서
  577. 577.  Map형태로
  578. 578.  데이터를
  579. 579.  저장l 다중
  580. 580.  삽입,
  581. 581.  삭제시
  582. 582.  사용되는
  583. 583.  addInsertion이나
  584. 584.  addDeletetion사용시
  585. 585.  Map에
  586. 586.  데이터를
  587. 587.  저장l execute()
  588. 588.  명령을
  589. 589.  수행하여Thrift통신을
  590. 590.  하고
  591. 591.  Map을
  592. 592.  비움l 데이터의
  593. 593.  사이즈에
  594. 594.  따라서
  595. 595.  적절한
  596. 596.  execute()가
  597. 597.  호출되지
  598. 598.  않을때
  599. 599.  OOM발생이
  600. 600.  가능함2113년 6월 18일 화요일
  601. 601. JBoss
  602. 602.  Community
  603. 603.  (http://www.jboss.org)Korea
  604. 604.  JBoss
  605. 605.  User
  606. 606.  Group
  607. 607.  (http://cafe.naver.com/jbossug)2213년 6월 18일 화요일

×