데드락 관련 기초지식

데드락의 발생 조건

상호배제: 프로세스가 점유하고 있는 자원에 다른 프로세스가 접근할 수 없다.
점유와 대기 : 이미 자원을 보유하고 있는 프로세스가 다른 자원을 요청하여 기다린다.
비선점: 프로세스에게 할당된 자원을 강제로 그 프로세스로부터 뺏을 수 없다.
순환대기: 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

데드락 해결 방법
데드락 무시: 데드락이 발생할 경우는 드물기 때문에 무시
데드락 예방: 데드락 발생 조건 4가지중 하나를 차단해 발생하지 않도록 예방한다.
데드락 회피: 데드락이 발생할 가능성을 인정하고, 데드락이 발생하려고 할때 동적으로 회피
데드락 탐지와 복구: 데드락이 발생한 것을 탐지하고 복구한다.

혜센 2차 클로즈 베타 !!!

홈페이지 들어갈때 깜짝 놀랬십ㄴ다. .

소지섭 , 송승헌이 ㅡ0ㅡ;; 이거 광고비 제법 나오겠는 데욤..

암튼 2차 클로즈 베타 하면서 경품도 빠방해지고

1차에 비해 많은 발전을 거듭했길 기도해봅니다.

ㅋㅋ

당첨되면 좋겠네요 ..

http://hessian.yoitt.com/pages/event/event_cbt2.asp


데이터베이스 연결 괜찮은 내용 ASP


DB 자료형 이야기 1. 숫자형 - mssql, oracle, mysql SQL

1. 자료형의 종류

 

   [mssql2000]

        bigint           8바이트    64비트    부호 있음

        int               4바이트    32비트       "

        smallint        2바이트    16비트       "

        tinyint          1바이트     8비트        "

        decimal(p,s)   실수표현    p: 전체자리수 , s는 소수점 부분의 길이

        numeric(p,s)    "

        money         8바이트   64비트  통화 단위  1/10000의 정확성을 가짐

        smallmoney  4바이트 32비트    "

 

   [oracle]

        number          10바이트   80비트 부호있음  , 기본이 10바이트

        number(n)      바이트 지정, n은 바이트 숫자 

        number(p, s)  실수표현   p: 전체자리수, s는 소수점 부분의 길이

 

   [mysql]  : 가장 많음 .ㅠ.ㅠ

        tinyint            1바이트   정수

        smallint          2바이트   정수

        mediumint       3바이트   정수

        int, integer      4바이트   정수

        bigint             8바이트   정수

        float               4바이트   부동소수점 표현

        double           8바이트   부동소수점 표현

        real                double과 같음

        decimal(p,s)  실수표현   p: 전체자리수, s는 소수점 부분의 길이

        numeric(p,s)   decimal과 같음

        bit(n)             n비트 정수 표현

       

2. 자료형의 선언

   

    테이블을 만들 때 이 자료형에 대해서 선언 하는 방법을 알아보자. 대부분 다 비슷하다.

   다만 몇가지  () 안에 옵션에 있는 것만 알아보면 될 것이다.

 

    [mssql2000]

        create table test (

             aaa bigint,

             bbb decimal(10, 2) not null

        )

 

    [oracle]

        create table test (

             aaa number(8),

             bbb number,

             ccc number(10, 2)

        )

 

    [mysql]

         create table test (

              aaa bigint,

              bbb double,

              ccc decimal(10, 2)

         )

 

    위와 같은 형태로 테이블을 생성 할 때 우리는 자료형을 지정할 수 있다.

 

3. 숫자형에 대한 몇가지 옵션

 

   [mssql2000]

       mssql에서는 정수형에 대해서 identity 라는 옵션을 걸어 줄 수 있다.

       이것은 그 필드에 숫자를 자동으로 채우줌으로써.. 유일안 키값을 생성 할 수 있다.

 

   [oracle]

       오라클에서는 따로 옵션은 없다.

 

   [mysql]

       mysql에서는 auto_increment 라는 옵션으로 identity와 같은 역할을 하게끔 할 수 있다.

       mysql은 unsigned와 zerofill을 가지고 있다. unsigned는 부호없는 숫자를 만들어서 좀 더 넓은 범위의 숫자를 사용

       할 수 있게 하고 zerofill은 현재 필드의 값을 0으로 모두 채우는 옵션이다.

 

   다만 주의 해야 할 것은 mysql 에서는 auto_increment가 되면 그 필드는 기본키가 되어야 하지만 mssql에서는 identity가 되어도

   기본키가 되지 않아도 된다. 다만 대부분 기본적으로 그 필드를 기본키로 걸 뿐이다.

 

4. 이기종 디비간의 호환성

   대부분의 디비는 정수형에 대해서 가지고 있다. 하지만 몇가지 충족되지 않는 자료형을 가지고 있기 때문에

   숫자형에 대해서는

 

   mssql : int, decimal(p,s)

   oracle : number, number(p,s)

   mysql : int, decimal(p,s)

 

 

출처 :

1. 문자열 형의 종류

 

    [mssql]

        char(n)         최대 8000자, 유니코드 아님, 고정길이      

        varchar(n)     최대 8000자, 유니코드 아님, 가변길이      

        text               최대 2^31-1 자, 유니코드 아님, 가변길이       (32비트)

 

        nchar(n)         최대 4000자, 유니코드 아님, 고정길이      

        nvarchar(n)     최대 4000자, 유니코드 아님, 가변길이      

        ntext               최대 2^30-1 자, 유니코드 아님, 가변길이       (32비트)

 

        binary           최대 8000바이트, 고정길이, 이진문자열(비트 스트링)

        varbinary       최대 8000바이트, 고정길이, 이진문자열(비트 스트링)

        image           최대 2^31-1 바이트, 고정길이, 이진문자열(비트 스트링)

 

    [oracle]

       char(n)          최대 2000 바이트

       varchar2(n)      최대 4000 바이트

 

       nchar(n)         최대 2000 바이트

       nvarchar2(n)      최대 4000 바이트

 

       CLOB            1바이트 문자열, 최대 4GB

       BLOB            이진 문자열, 최대 4GB

       BFILE            바이너리 데이타 외부화일로 저장, 최대 4GB

 

       LONG           가변길이 문자열, 최대 2GB

       LONG RAW    가변길이 이진 데이타, 최대 2GB

       RAW             가변길이 이진 데이타, 최대 2000 바이트

 

    [mysql]

       char(n)          최대 255 바이트 까지

       varchar(n)      최대 255 바이트 까지

 

       binary(n)        이진데이타, 바이트 지정한만큼, 고정길이

       varbinary(n)    이진데이타, 바이트 지정한만큼, 가변길이

 

       tinyblob           이진데이타, 최대 255 바이트  (2^8)

       blob                이진데이타, 최대 65535 바이트  (2^16)

       mediumblob      이진데이타, 최대 2^24 바이트

       longblob          이진데이타, 최대 2^32 바이트,

 

       tinytext           1바이트 문자열, 최대 255 자  (2^8)

       text                1바이트 문자열, 최대 65535 자(2^16)

       mediumtext      1바이트 문자열, 최대 2^24 자

       longtext          1바이트 문자열, 최대 2^32 자

 

손수 다 적을려니 너무 빡시네. .ㅋㅋ 암튼 대충 이런 문자열 타입들이 있네요...

 

전체적으로 크게 보면

 

    일반 문자열 데이타, 유니코드 문자열 데이타, 대용량 이진 데이타, 대용량 문자열 데이타 등 으로 나눌 수 있는데요.

    실제로 코딩 할 때 쓰는건 몇 개 없네요..ㅋㅋ 암튼 이것으로 다들 잘 해봅시다.

 

2. 자료형의 선언

 

    [mssql]

     create table test (

        aaaa varchar(200)

     )

 

    [oracle]

     create table test (

        aaaa varchar2(300)

     )

 

    [mysql]

     create table test (

        aaaa varchar(400)

     )

 

    기본적으로 바이트 선언하는 형태는 너무나도 간단합니다. 특정 자료형과 길이만 적어 주기 때문에.. ^^

 

3.  이기종간의 디비 호환성

 

    일반적으로 문자열은 varchar 를 많이 씁니다.

    물론 속도 줄인다고 char 쓰시는 분들도 계시는데 이건 디비에 따라서 일정길이 이상이 되면 내부적으로 varchar로 돌아가기 때문에

    그냥 varchar 쓰시는게 더 좋을 듯 합니다.. 그리고 속도 차이도 거의 없구여..

 

    대부분의 디비에 들어가는 형태는 가변길이 문자열입니다. 그래서

   

    varchar, nvarchar, 오라클은 varchar2 등을 쓰게 됩니다.

 

    다만 조금씩 차이 나는 부분이  대용량의 글을 적을 때가 문제인데요...

 

    mssql : text

    oracle : clob

    mysql : text 관련 타입

 

    등으로 보편화 될 수가 있겠습니다..

 

    그래서 varchar(varchar2) 나 text(clob) 등으로 문자열에 대한 데이타를 정의해주시면 되겠구여..

 

    가끔씩 이미지를 통째로 필드에 넣는 경우가 있습니다. 그럴경우는 이진데이타 자료형으로 해서 넣어줄 수 있는데요..

 

    mssql : varbinary

    oracle : blob, bfile

    mysql : blob 관련 타입

 

    등을 많이 사용하게 됩니다.

 

    하지만 아직까지는 그런 대용량 이미지 데이타 들은 디비에 넣지 않고 그냥 파일로 복사하고 링크만 저장하는 방식이 선호가

    되고 있습니다. 나중에 디비 성능이 좀더 좋아지고 하드웨어, 네트워크 성능이 더 좋아지면 그때는 데이타베이스에서 모든 것을

    처리하는 때가 오겠죠? ^^ 그 때를 기대해봅니다.

출처 : Tong - hArMa님의 SQL통


varbinary타입의 insert,select방법?[mssql] SQL

저한테 문제는 mssql을 잘 모른다는 겁니다.

insert tblName (varbinaryField) value (0xa3f3bd)  <<이런문은 가능하더군요.  그렇다면 float[]는 어떻게 mssql에 저장하고 다시 사용할수 있는지...

조사해본 결과mssql의 varbinary타입과 mysql의 varbinary,blob타입은
다르다는 것.

mysql의 blob타입과 같이 float[]를 mssql에 저장하려 할수있는 방법이
어떤게 있나요.
어떤타입을 써야하고 어떻게 insert하는지 좀 갈켜주시면 감사하겠습니다.

------------------------------------------------------------------------------

INSERT INTO tblName (varbinaryField) VALUES (CONVERT(varbinary, 123.11))

SELECT CONVERT(float, varbinaryField) FROM tblName ..

위와 같이 하면 될듯 합니다.
아래는 MSDN CAST/CONVERT 링크입니다.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_2f3o.asp
------------------------------------------------------------------------------



float  을 db에 넣는걸 말한게 아니구요.
float[] 을 말한건데요. 배열...
그리고 더 정확히 말하면 float[]를 varbinary의 하나의 row에 다 넣는걸
질문 한겁니다..ㅠㅠ

mysql에서는 이게 blob타입 하나의row에 가능하거든요 float[]를 받아서요.
데이터가 워낙 많아서 한row에 Array로 넣지 않으면 거의힘들어 지기에
..

varbinary 잘 쓰시는 분이 없나요... mssql도움말 페이지에도 찾을수가 없었습니다.ㅠㅠ 조언 부탁드립니다.

------------------------------------------------------------------------------

각각의 float 를 byte[4] 로 변환하신다음..

byte arr = new Byte[4];
arr[0] = (float[0] << 24);
arr[1] = (float[0] << 16) & 0xFFFFFF;
arr[2] = (float[0] << 8) & 0xFFFF;
arr[3] = (float[0]) & 0xFF;

ByteBuffer 에 모두 밀어 넣습니다.
그럼다음 ByteBuffer 의 toString 메소드로 문자열로 받아와서
varbinary 필드에 집어 넣으시고..

꺼내 올때는 반대로
ByteBuffer 에 setString() 으로 밀어 넣은 다음
array() 메소드로 byte[] 을 받아서

4개의 바이트 단위로 하나의 float 로 변환 하시면 될것 같습니다.






1 2 3 4 5 6 7 8 9 10 다음