다수의 사용자 환경에서 Sequence를 쓸때 다음에 들어갈 값은 알수 없죠..
다음에 들어간 값을 구한순간 누군다 그 Sequence를 써버려 값이 증가해 버렸을지도 모르니까요
-- 전병혁 님이 쓰신 글:
>> 감사합니다.
그래도 그냥 쓰렵니다.
뭐 그런일은 별로 없겠지만 정말 큰문제가 되지 않을것 같군요
규모가 작은 곳이라면 큰 문제가 되지 않지요. 하지만 틀림없이 큰 문제가 됩니다. 어플리케이션 개발시에 김대성님이 지적하신 문제는 반드시 염두에 두시고 개발하셔야 합니다.
atomic operation 이라는 개념을 잘 이해하시고 어플리케이션을 작성하셔야 합니다.
김대성님께서 좋은 지적을 하셨습니다.
모든 분들께 감사드립니다.
아직 공부중이라 모르는게 넘 많습니다.
더 열씨미 공부 하겠습니다.
재익님 "atomic operation 이라는 개념" 에 대한 문서를 어디가면 찾을 수 있나요?
아님 서적을 구입해야 하나요?
뭐... 그렇게 어려운 개념은 아닙니다. 김대성님이 지적한 문제점은 간단한 게시판 프로그램에서도 생기는 문제입니다.
그리고 atomic operation 이라 함은 모든 transaction 이 한 단위의 동작처럼 움직여줘야 한다는 개념입니다.
예를 들어 보겠습니다.
sequence 에서 내가 last_value 를 읽어 들여서 그 값을 가공을 해서 디비에 넣는다고 가정해 봅시다. 그리고 그 값이 디비에 저장 되기 전까지는 절대로 sequence 값이 변해서는 안된다고 생각해 봅시다.
이럴 경우
1. sequence 로 부터 last_value 를 읽는다.
2. 그 값을 가공한다.
3. 가공된 값을 디비에 저장한다.
이 세가지의 동작이 모두 하나의 명령어처럼 움직여 주어야 하며, 내가 이 동작을 하는 동안에는 다른 어느 누구도 그 사이에 sequence 에 영향을 미쳐서는 안됩니다. 그러므로 이 세가지 동작이 하나의 명령어처럼 동작함을 보장하게 하는 개념을 atomic operation 이라는 말을 사용합니다.
이런 것은 transaction 처리를 해야 하는 작업에서는 대부분의 경우 이러한 것은 기본적인 것입니다.
그렇게 어려운 개념은 아니지만 transaction 을 이용하는 프로그래밍을 할때는 꼭 명심해 두어야 할 개념입니다.
재익님 정말 감사합니다. 제가 아직 초보라서 잘 모르거든요....
차근차근 공부를 해야겠군요... 다시 한번 감사드립니다.
저는 게시판을 만들고 있습니다.
위에 제가 질문한것은 현재 새글을 작성하고 저장을 할때 첨부파일은 data/table_name/last_value/file_name 이런식으로 저장이 되거든요...
예전에는 last_value값 대신 날짜(time()함수 사용)를 디렉토리로 사용을 했습니다.
어떤방법으로 저장을 하는것이 효율적일까요?