android - 접속 - 유니티 안드로이드 sqlite




안드로이드:SQLite에서 기본 키로 UUID 사용 (2)

내 앱을 다른 앱 사용자와 동기화해야합니다 (기기 자체에 있음). 또한 사용자가 인터넷에 연결되면 다른 공동 작업 사용자와 동기화되는 오프라인 편집을 지원하기를 원합니다.

따라서 사용자 A는 (오프라인 일 때) 일부 데이터 (데이터베이스 항목을 업데이트 할 단어)를 변경하거나 새 레코드를 데이터베이스에 추가합니다. 사용자 A가 인터넷에 연결되면 모든 변경 사항과 새로운 기록이 다른 협업 사용자에게 전달됩니다. 따라서 사용자 B는 변경 / 업데이트를 가져와 User B 로컬 장치 데이터베이스에 삽입 / 업데이트 할 수 있습니다.

그러나 데이터베이스 항목의 ID가 전체 시스템에서 고유해야합니다. 따라서 UUID와 같은 것을 사용해야합니다.

내 질문 : 자동 증가 될 정수 대신 안드로이드 sqlite 데이터베이스 테이블에서 기본 키로 UUID (String / Varchar)를 사용하는 것은 나쁜 생각입니까?

기본 키로 문자열 (UUID는 36 자)을 사용하여 성능 문제가 발생할 것으로 보입니다.

정수 대신 uuids 인덱싱 시간이 오래 걸리는 것 같아요 (문자열 비교 대 정수 비교). 나는 또한 UUID를 사용할 때 새로운 데이터베이스 레코드 / 엔트리가 삽입 될 때마다 기본 키 인덱스가 더 이상 정렬 된 순서가 아니기 때문에 데이터베이스가 기본 키 열을 다시 색인해야한다고 추측한다. 정수 자동 자동 증가 기본 키. 새로운 자동 증가 기본 키는 항상 지금까지 최대 숫자이므로 인덱스가 자동으로 정렬 된 순서로 저장되기 때문에 모든 미래 레코드가 끝에 추가되기 때문에. 내가해야 할 일은 2 - 3 개 이상의 테이블에 대한 JOINS입니다. 또한 정수 대신 JOINS에서 문자열을 비교하면 데이터베이스 쿼리가 느려질 것이라고 생각합니다.

그러나 그러한 협업 동기화 시스템을 구현할 다른 가능성은 없으므로 UUID를 사용해야합니다. 맞습니까?

또 다른 가능성은 정수 자동 증가 기본 키를 사용하고 두 번째 열 uuid를 사용하는 것입니다. 따라서 사용자 로컬 장치에서 작업하려면 JOINS 등에서이 기본 키 (정수)를 사용하는 반면 다른 사용자와 동기화하려면 uuid 열을 사용합니다.

UUID를 기본 키로 직접 사용하여 큰 성능상의 문제가 발생할 것으로 기대하지 않으므로 어떻게 생각하십니까?

다른 제안?


자동 증가 될 정수 대신 안드로이드 sqlite 데이터베이스 테이블에서 기본 키로 UUID (String / Varchar)를 사용하는 것은 나쁜 생각입니까?

내가 생각할 수있는 유일한 특정 문제는 CursorAdapter 와 그 서브 클래스를 사용하여 해당 테이블에 대한 쿼리 결과를 표시 할 수 없다는 것입니다. CursorAdapter 에는 Cursor 에 고유 한 정수 _id 열이 필요하며 그 중 하나는 없을 것입니다. 직접 처리하는 BaseAdapter 확장하는 자체 어댑터를 만들어야합니다.

기본 키로 문자열 (UUID는 36 자)을 사용하여 성능 문제가 발생할 것으로 보입니다.

아마도,하지만 장치 크기의 데이터베이스에서 중요한 문제로 변하면 다소 놀랄 것입니다.

그러나 그러한 협업 동기화 시스템을 구현할 다른 가능성은 없으므로 UUID를 사용해야합니다. 맞습니까?

네트워크 프로토콜에 대해 일종의 UUID가 필요합니다. 아마도 데이터베이스에 UUID가 필요할 것입니다. UUID가 테이블의 기본 키일 필요가 있는지 여부는 스키마를 모르기 때문에 말할 수 없습니다.

또 다른 가능성은 정수 자동 증가 기본 키를 사용하고 두 번째 열 uuid를 사용하는 것입니다. 따라서 사용자 로컬 장치에서 작업하려면 JOINS 등에서이 기본 키 (정수)를 사용하는 반면 다른 사용자와 동기화하려면 uuid 열을 사용합니다.

옳은. UUID-> 로컬 정수 ID 매핑 테이블을 사용하고 네트워크 프로토콜에서 UUID를 사용하고 로컬 데이터베이스를 대부분 로컬 정수 ID를 사용하여 유지합니다. 이것이 (특히 데이터베이스 스키마의 복잡성이 증가한 경우) 현저한 성능 향상을 가져올 지 여부는 말할 것도 없습니다.

UUID를 기본 키로 직접 사용하여 큰 성능상의 문제가 발생할 것으로 기대하지 않으므로 어떻게 생각하십니까?

IMHO, 일부 성능 테스트를 실행하여 비교 가능한 특정 데이터를 얻거나 데이터베이스 입출력이 느린 경우에만 걱정할 수 있습니다.


바이너리 및 텍스트와 같은 UUID의 성능 결과 세트는 다소 관련 UUID / SQLite 질문에서 찾을 수 있습니다. https://.com/a/11337522/3103448

결과에 따라, 이진 및 문자열 UUID는 모두 인덱싱 될 때 Create 및 Query에 대해 SQLite에서 효율적일 수 있습니다. 별도의 절충은 사람이 읽을 수있는 문자열이 이진 파일 크기의 작은 데이터 크기보다 우선적인지 여부입니다.





uuid