일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 튜토리얼
- 주키퍼
- redis
- DP
- HBase
- leetcode
- 파이썬
- boj
- Go언어
- dynamic programming
- 자바
- Java
- Linux
- OOM
- zookeeper
- programmers
- golang
- Python
- 알고리즘
- gradle
- scala
- go
- codewars
- 문제풀이
- 프로그래머스
- docker
- 코드워
- 동적프로그래밍
- 리눅스
- 스칼라
- Today
- Total
목록컴퓨터 과학 (10)
파이문
컬럼 패밀리에는 TTL 이라는 값을 초 단위로 세팅할 수 있다. 그러면 HBase 는 자동으로 expiration time (TTL) 에 다다른 row 는 삭제 한다. 이 삭제 작업은 모든 버젼의 row 에 해당한다. (HBase row 에는 여러 버젼이 있다. 조회 시에 나오는 값은 가장 최신 버젼의 데이터이다.) TTL 시간 값은 인코딩 되어 있고 UTC 값이다. 컬럼 패밀리에 TTL 거는 예 hbase(main):002:0> create 'ttl_demo', {'NAME' => 'cf','TTL' => 20} # 아님 요렇게도 가능하다. (결과는 같다.) hbase(main):003:0> alter 'ttl_demo', NAME => 'cf', TTL => 20 Store file(HFile) 에는..
https://www.facebook.com/note.php?note_id=10150162742108920
☢️ 주의 레디스를 모르는 상태에서 의식의 흐름대로 조사하고 정리한 내용입니다. 발단 Redis에서 같은 키를 사용하는 서로 다른 어플리케이션이 있었다. 가장 베스트는 Redis 서버를 아예 분리해서 각각의 어플리케이션이 분리된 Redis 를 이용하면 되겠지만, 남는 서버도 없고 어플리케이션의 서비스 크기가 크지 않고 (메인 서비스가 아니고 부가적인 서비스였다.) 그러다 보니 서버 발주는 오바였다. MySQL 이 Database 를 여러개 두는 것 처럼 Redis 도 그럴 수 있지 않을까? 생각하였는데, 찾아보니 Redis 도 Database 를 여러개 둘 수 있었다. 아무 명령도 치지 않았고, 그냥 기본적인 것들로 사용하였다면 DB 는 자동으로 0 번이다. 만약 다른 DB 를 사용하고 싶다면 selec..
https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zab+vs.+Paxos https://raft.github.io/
주키퍼를 통한 리더 선출 HBase 를 비롯한 많은 분산 시스템에서는 주키퍼를 통해 일관성, 가용성 (CAP 이론중 CA) 을 보장 받고 있다. Leader Election (리더 선출) 다양한 다른 분산 시스템과 같이 주키퍼를 이용해 고 가용성 어플리케이션을 설계할 일이 생겨서, 리더 선출 방법들을 살펴 보았다. 이 방법은 최선이 아닐 수 있다. 리더 선출 준비 우선 임의의 path 를 지정한다. 여기서는 /election 이라고 하겠다. /election 하위에, 가용하는 서버 목록의 정보들을 Ephemeral-sequential 모드로 생성하는 것이 핵심이다. 만약 서버가 1번부터 10번까지 총 10개 있다고 해보자. (혹은 10개의 프로세스라고 볼 수도 있다.) 1번 서버(혹은 프로세스) 가 /e..
Zookeeper 주키퍼는 기본적으로 분산 시스템을 위한 코디네이터다. 주키퍼 주키퍼는 데이터를 디렉토리 구조로 관리하며 key-value 스토리지 처럼 key 로 접근 가능하다. 물론 value 를 사용하지 않아도 된다. 그럴 땐 임의로 "" 와 같이 빈 문자열을 넣어준다. 이러한 디렉토리 구조는 (당연하겠지만 tree 형태) 계층을 가지고 있고 각 데이터 노드를 znode 라고 부른다. 이러한 znode를 다루는 주키퍼 작업을 recipe 라고 부른다. 주키퍼의 쿼럼 주키퍼의 쿼럼은 적어도 하나의 앙상블 (서버군) 과 겹쳐야 하며 과반수가 넘어야 한다. 만약 서버가 5대라면 쿼럼은 3개여야 한다. 만약 5대의 앙상블 서버 들 중 2대만 쿼럼으로 지정한다면 아래와 같은 시나리오가 발생한다. 서버 s1,..
Split Brain 이란? 시스템의 두 부분 이상이 독립적으로 진행되어 시스템이 일관되지 않게 동작하는 것을 말한다. 분산 시스템에서 마스터-슬레이브 상태에서 네트워크 이상으로 인해 슬레이브는 마스터가 이상이 있다고 판단한다. 때로는 맞을 수도 있고 때로는 오탐일 수도 있다. 만약 잘못된 판단임에도 슬레이브 중 하나가 마스터로 선출이 되면 두 개의 마스터가 존재하게 된다. 이런 경우를 Split Brain 스플릿 브레인이라고 부른다.
데이터 분산 방법에는 크게 두 가지가 있다. 바로 복제(replication) 와 샤딩(sharding) 이다. 복제(replication) 복제는 같은 데이터를 복사해 여러 노드에 분산하는 방법이다. 복제에는 크게 마스터-슬레이브 (master-slave) 와 peer-to-peer 두 가지 방법이 있다. 마스터-슬레이브 마스터-슬레이브의 경우 여러 노드에 데이터를 복제하여 사용하는 방법이다. 이 때 노드를 마스터 노드와 슬레이브 노드라고 부르며, 모든 쓰기는 마스터에서 행하고 읽기는 마스터나 슬레이브에서 처리 된다. 쓰기가 실행 될 경우, 데이터는 마스터에서 슬레이브로 복제된다. 읽기를 마스터 노드와 슬레이브 노드에서 처리하므로, 읽기가 많이 발생하는 작업에서 성능 효과를 얻게 된다. (더 많은 읽기..
NQueen 문제 전형적인 DFS 문제다. 놓을 수 있는 자리에 퀸을 놓고 그 다음 자리(다음 row 혹은 다음 col) 에 퀸을 놓을 수 있는지, 재귀로 확인한다.N*N 보드에는 무조건 N개의 퀸이 와야 하는데, 그러려면 한 줄 (row 는 물론이고 col) 에 무조건 퀸이 하나 있어야 한다. 그러니, 즉 줄 단위로 확인해 가면서 퀸을 놓는지 확인하고, 놓을 수 있다면 그 다음 줄로 넘어가는 DFS 인 것이다. 물론 모든 칸을 다 확인해가면서 자리를 찾을 필요는 없고, 퀸이 절대로 있을 수 없는 자리를 가지치기 하면 된다. 퀸은 다른 퀸이 있는 자리에서 세로/가로/좌 대각선/우 대각선에 해당 하는 곳은 위치할 수 없다.그러니, 처음에 퀸이 있을 수 있는 자리에 임의의 값 1을 대입하고, 그 다음 줄로 ..
수열에서 연속된 구간의 최대 합 구하기Largest Sum Contiguous Subarray / Maximum subarray problem 유명한 문제로, 주어진 수열에서 최대 합을 구하는 것이 요점이다. 쉽게 생각하자면 O(n^2)으로 구하면 되지만 (Brute Force), 대부분의 문제 풀이 사이트에서는 O(n)으로 풀기를 권고하고 있다. 제일 무난 한것이 Dynamic Programming으로 푸는 것인데, Kadane’s Algorithm이라고 한다. 현재 까지의 구간의 최대 합과, 해당 숫자와 Max 값을 비교하고 이 값을 다시 전체 합과 Max 값을 비교하는 것이다.class Solution: def maxSubArray(self, nums): """ :type nums: List[int..