@ 17. 1 ~ 18
-
[MySQL] 조인 (2)@ 17. 1 ~ 18/DB 2018. 6. 28. 22:44
카테시안 조인카테시안 조인은 FULL JOIN 또는 CROSS JOIN이라고도 한다. 일반적으로는 조인을 수행하기 위해 하나의 테이블에서 다른 테이블로 찾아가는 연결 조건이 필요하다.하지만 카테시안 조인은 조인 조건 자체가 없이 2개 테이블의 모든 레코드 조합을 결과로 가져오는 방식이다. 조인이 되는 테이블의 레코드 건수가 1 ~ 2건 정도로 많지 않을때라면 문제가 되지는 않는다. 하지만 레코드 건수가 많아지면 조인의 결과 건수가기하급수적으로 늘어나므로 Mysql서버 자체를 응답 불능 상태로 만들어버릴 수도 있다. 조인의 양쪽 테이블이 모두 레코드 1건인 쿼리를 제외하면 애플리케이션에서 사용되는 카테시안 조인은 의도하지 않았던 경우가 대부분이다. Mysql에서 CROSS JOIN은 INNER JOIN과 ..
-
-
읽기 / 쓰기 락@ 17. 1 ~ 18/C# 멀티스레드 2018. 6. 27. 23:01
읽기 / 쓰기 락일반적으로 여러 읽기는 쓰기보다 빠르다.병렬적으로 발생하는 이런 읽기를 허용하는 것은 엄청나게 코드의 확장성을 개선한다.(읽기 쓰기 모두 락을 걸면 읽기도 쓰기도 모두 느려진다) RWL은 다음과 같은 기본적 사항을 요구한다.1. 스레드가 락을 획득할때 읽기인지 쓰기인지 명시해야한다.2. 최대 하나의 쓰기가 일정 시간에 락을 소유할 수 있다.(배제모드)3. 쓰기가 있는 한 어떤 읽기도 락을 소유할 수 없다.4. 어떤 수의 읽기도 주어진 시간에 락을 소유할 수 있다.(공유모드) 예를 들어 32개의 CPU를 완벽히 장착한 서버를 갖고 있다고 하고 각 CPU는 항상 동시적으로 하나의 요청을 수행한다는 것을 가정한다.높은 성능으로 장착된 서버에서 주어진 시간에 수행할 수 있는 것보다 더 많은 일을..
-
[MySQL] 테이블 조인 (1)@ 17. 1 ~ 18/DB 2018. 6. 26. 21:38
Mysql 조인 방식은 네스트드 루프로 알려진 중첩된 루프와 같은 형태이다. 조인의 종류INNER JOIN과 OUTER JOIN으로 구별된다.OUTER JOIN은 다시 LEFT OUTER JOIN(LEFT JOIN)과 RIGHT OUTER JOIN(RIGHT JOIN), FULL OUTER JOIN으로 구분할 수 있다.그리고 NATURAL JOIN과 CROSS JOIN(FULL JOIN, CARTESIAN JOIN)으로도 구분할 수 있다. 조인의 처리에서 어느 테이블을 먼저 읽을지를 결정하는 것은 상당히 중요하다.작업량 자체가 달라지기 때문이다. INNER JOIN은 어느 테이블을 먼저 읽어도 달라지지 않으므로 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있다.OUTER JOI..
-
스레드 로컬 저장소@ 17. 1 ~ 18/C# 멀티스레드 2018. 6. 21. 00:49
스레드 로컬 저장소 TLS (Thread local Storage)를 이용하면 스레드마다 고유한 메모리 영역에 정보를 저장할 수 있다이 정보는 스레드별로 따로 관리되며 한 스레드내에서는 마치 전역 변수처럼 사용할 수 있다. 예를들어 C++과 C#에서 정적변수는 프로세스 내의 모든 스레드에서 접근 가능한 메모리 영역에 저장된다.모든 스레드가 공유해 사용하는 정적 변수나 전역 변수는 동기화 없이 사용하면 문제가 생길 수 있다. 스레드마다 데이터를 따로 관리해 동기화 없이 처리하려는 경우나 프로그램 특성상 스레드마다 필요한 정보를 따로 관리해야하는 경우도 흔히 볼 수 있다.바로 이때 TLS를 사용한다. TLS를 사용하면 시스템 내에서 논리적으로는 동일한 변수를 스레드마다 별도의 메모리 공간에 저장할 수 있다.
-
파이썬에서의 값 할당 방식@ 17. 1 ~ 18/파이썬 2018. 3. 18. 21:16
def sort_priority2(nubmers, group): found = False def helper(x): if x in group: found = True return (0, x) return (1,x) numbers.sort(key=helper) return found변수가 이미 현재 스코프에 정의되어 있다면 새로운 값을 얻는다.파이썬은 변수가 현재 스코프에 존재하지 않으면 변수 정의로 취급한다. 새로 정의되는 변수의 스코프는 그 할당을 포함하고 있는 함수가 된다. 위에 함수에서 return받는 found의 값이 False일까? True일까?사전에 helper내부에서 found = True가 된다는 가정하에서 말이다. 정답은 False이다. 그러면 우리가 알고 있는?? c#에서나.. 할당되는..
-
파이썬 None@ 17. 1 ~ 18/파이썬 2018. 3. 18. 17:33
특별한 의미를 나타내려고 함수의 반환값에(뭐 보통은..error나 잘못된 리턴값을 표현할때?) None을 하게된다면..오류를 일으키기 쉬울 수도 있다. 이유는 None이나 다른 값이 조건식에서 False로 평가되기 때문이다. def divide(a,b): try: return a/b except ZeroDivisionError: return None result = divide(0, 0)if result is None: print("None inputs") if result: print("True Input") if not result: print("False inputs") if result is False: print("is False inputs")결과값None inputsFalse inputs 위..
-
try/except/else/finally@ 17. 1 ~ 18/파이썬 2018. 3. 18. 16:19
finally 블록 : 예외가 발생해도 정리 코드를 실행하고 싶다면 finally 를 사용한다. : try 이후에 항상 실행된다는것 else 블록dict1 = {'a':1, 'b':2}def testMethod(dict1): try: print(dict1['b']) except: print("예외발생") else: print('else문') testMethod(dict1) : 여기서 키값이 b일때는 try문 다음에 else가 실행된다. : except이 일어날 경우 else가 실행되지 않는다. : 단순히 if ~ else 를 except ~ else로 이해하면 편하다.else 블록은 try 블록에 있는 코드의 양을 최소로 줄이는 데 도움을 주며 try / except 블록과 성공한 경우에 실행할 코드를 ..