안녕하세요~ wince에서 sqlite db를 사용하여 프로그램을 만들고 있는데요 궁금한 점이 생겨서요...
2개의 스레드를 만들어서 한쪽에서는 select만 하고 한쪽에서는 insert만 할려고 합니다.
만약에 동시에 select와 insert 작업이 db에 들어가게 되면 오류가 나나요?? 아니면 정상 작동 하나요??
답변 부탁드리겠습니다~~~
sqltie 자체가 어떻게 작동하는지는 모르겠지만
보통 코드를 짜다가 위와 같이 같은 데이터에 동시에 두개 이상의 작업이 가능한 경우, 결과가 어떻게 될 지 예측할 수 없습니다.
select가 먼저 되고 나서 insert가 될지, 혹은 insert가 된 다음 select가 되어 select한 값에 insert결과가 반영될지 알 수 없죠
그래서 보통은 동시에 같은 데이터에 접근할 가능성이 있으면 critical section이나 mutex등으로 동기화를 해줍니다
동기화와 관련된 자료를 찾아보시면 좋을거 같네요
답변 감사 드립니다. 동기화를 시키도록 해야 겠군요
DB마다 기본적으로 동기화를 해주는 것이 있고 아닌 것이 있습니다. 제가 알기로는 sqlite는 동기화를 안해주는걸로 압니다. 커밋을 할때까지는 동기화를 해주셔야합니다. sqlite의 메뉴얼에 관련 내용이 있을겁니다.
아무래도 동기화를 시켜야 겠군요 답변 감사드립니다 ^^
http://ask.joinc.co.kr/index.php?qa=29&qa_1=sqlite%EA%B0%80-threadsafe-%ED%95%98%EB%82%98%EC%9A%94
도움이 되셨으면 좋겠습니다.
이런 기능이 있었네요~~
오 빌드를 다시하면 되는군요..
그런데 thread safe하다는 것이요 트랜잭션에 대한 이야기는 아닌거 맞지요? 만약 두 쓰레드가 하나의 테이블에 값을 읽고 쓴다면 thread safe는 테이블의 완전성을 보장한다는 것이지만 커밋을 하지 않으면 테이블의 값이 완전히 바뀌지 않자나요.
양쪽에서 insert, update 하는 것이 아닌 한쪽만 insert 를 하는 것이니 어떻게 해도 안전하지 않을까요? 설마 insert 과정이 반만 진행된 상태에서 select 했다고 이상한 데이터를 리턴하진 않겠죠.
https://xenosi.de/
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
동기화
sqltie 자체가 어떻게 작동하는지는 모르겠지만
보통 코드를 짜다가 위와 같이 같은 데이터에 동시에 두개 이상의 작업이 가능한 경우, 결과가 어떻게 될 지 예측할 수 없습니다.
select가 먼저 되고 나서 insert가 될지, 혹은 insert가 된 다음 select가 되어 select한 값에 insert결과가 반영될지 알 수 없죠
그래서 보통은 동시에 같은 데이터에 접근할 가능성이 있으면 critical section이나 mutex등으로 동기화를 해줍니다
동기화와 관련된 자료를 찾아보시면 좋을거 같네요
그렇군요~~
답변 감사 드립니다.
동기화를 시키도록 해야 겠군요
DB마다 기본적으로 동기화를 해주는 것이 있고 아닌
DB마다 기본적으로 동기화를 해주는 것이 있고 아닌 것이 있습니다.
제가 알기로는 sqlite는 동기화를 안해주는걸로 압니다.
커밋을 할때까지는 동기화를 해주셔야합니다.
sqlite의 메뉴얼에 관련 내용이 있을겁니다.
감사합니다.
아무래도 동기화를 시켜야 겠군요
답변 감사드립니다 ^^
이런 이야기가 있군요...
http://ask.joinc.co.kr/index.php?qa=29&qa_1=sqlite%EA%B0%80-threadsafe-%ED%95%98%EB%82%98%EC%9A%94
도움이 되셨으면 좋겠습니다.
와우~ 감사합니다.
이런 기능이 있었네요~~
오 빌드를 다시하면 되는군요.. 그런데 thread
오 빌드를 다시하면 되는군요..
그런데 thread safe하다는 것이요 트랜잭션에 대한 이야기는 아닌거 맞지요?
만약 두 쓰레드가 하나의 테이블에 값을 읽고 쓴다면
thread safe는 테이블의 완전성을 보장한다는 것이지만
커밋을 하지 않으면 테이블의 값이 완전히 바뀌지 않자나요.
양쪽에서 insert, update 하는 것이 아닌
양쪽에서 insert, update 하는 것이 아닌 한쪽만 insert 를 하는 것이니 어떻게 해도 안전하지 않을까요?
설마 insert 과정이 반만 진행된 상태에서 select 했다고 이상한 데이터를 리턴하진 않겠죠.
https://xenosi.de/
댓글 달기