2011-01-11 5 views
3

핵심 데이터 (this answer 다음)를 사용하여 저장된 모든 엔티티를 삭제할 수있었습니다.코어 데이터의 기본 키 수/최대 값을 어떻게 재설정합니까?

문제는 기본 키가 여전히 위쪽으로 세고 있음을 확인했습니다. 엔티티에 대한 Z_MAX 값을 재설정하는 방법이 있습니까 (SQL 쿼리를 수동으로 작성하지 않고)? 내 뜻을 명확히하기 위해 아래 스크린 샷.

값 자체는 문제가 아니지만 향후 어느 시점에 최대 정수에 도달 할 수 있으며이 문제가 발생하지 않기를 바랍니다. 내 애플리케이션은 웹 서비스와 데이터를 동기화하고 핵심 데이터를 사용하여 캐시하므로 잠재적으로 기본 키가 한 번에 수백/천 개씩 증가 할 수 있습니다. 다른 개체에 대한 일부 정보를 유지해야하기 때문에 전체 Sqlite DB를 삭제하는 것은 옵션이 아닙니다.

'리셋'방법을 본 적이 있지만 확실하게 전체 Sqlite DB를 다시 설정합니까? 이 엔티티 집합에 대한 기본 키를 어떻게 재설정 할 수 있습니까? 재설정하려는 기본 키가있는 다른 엔티티와 관계가 없습니다.

Screenshot

답변

8

나는 미래의 어떤 시점 에서 최대 정수에 도달 할 수 있으며, 내가 일 이 원하지 않는 것을 단지 걱정.

정말요? 기본 키는 어떤 유형입니까? 왜냐하면 Int16 이외의 것이라면 그 사실을 신경 쓸 필요가 없기 때문입니다. 부호있는 32 비트 정수는 2,147,483,647 개의 값을 제공합니다. 64 비트 부호있는 정수는 9,223,372,036854775807 값을 제공합니다.

모든 것을 사용하려고한다면 정수 오버플로가 발생하는 것보다 더 중요한 사항이있을 것입니다.

핵심 데이터를 사용하는 경우 기본 키를 신경 쓰지 않아도됩니다. 핵심 데이터는 데이터베이스가 아닙니다. 핵심 데이터를 사용할 때는 관계를 사용하고 기본 키를 실제로 신경 쓰지 않아도됩니다. 핵심 데이터에는 실제 데이터가 필요하지 않습니다. SQLite는 질문에서

2

:

경우 미사용 키 값은 임의로 선택되는 가능한 최대 정수 키 9223372036854775807.

9,223,372,036854775807/(1024^4) = 8,388,608 테라 - 행. 나는 당신이 다른 한계에 먼저 부딪 힐 것 같습니다. :) http://www.sqlite.org/limits.html을 실행하면 실용적인 제한 사항을 검토 할 수 있습니다. sqlite가에 키를 다시 결코 의미 "자동 증가"의

sqlite> .schema zbookmark 
CREATE TABLE ZBOOKMARK (Z_PK INTEGER PRIMARY KEY, ... 

노트 부족 : 편리한 핵심 데이터 저장소 수익률에 대한 sqlite3를 요청

. 따라서 핵심 데이터를 사용하면 이전 키를 재사용 할 수 있으므로 시간이 지남에 따라 많은 행을 추가 (및 대부분 제거)하더라도 매우 안전합니다.

정말 리셋하고 싶다면 사과의 z_ 테이블을 샅샅이 뒤지는 것이 실제로 유일한 방법입니다. [이것은 이 아니며이 실제로해야 할 일이라고 말합니다. 작동하는 것처럼 보이더라도 적어도 선적을 원하는 모든 코드에서는 그렇지 않습니다.] 직접/수동 끔찍 바보 같은 생각을 코어 데이터 저장소를 편집이 사실 게다가

+3

당신은 *** *** 핵심 데이터 SQLite는 (나) 직접 상점을 편집하는 것은 아니다. 구현 세부 정보는 공개되지 않으며 언제든지 변경 될 수 있습니다. 이것은 나쁜 생각입니다. –

+0

어, 죄송합니다. 그렇습니다. Core Data의 추상화 장벽을 위반하는 것은 전적으로 자신의 위험에 처해 있다는 말을해야합니다. 당신은 돈을 내고 돈을 내면 기회가 생깁니다. – rgeorge

1

는 정답은 :

데이터베이스를 삭제하고 다시 만들 수 있습니다.

당연히, 당신은 당신의 모든 데이터를 잃을 것입니다,하지만 당신이이 작은 숫자에 관심이 있다면 괜찮습니다, 그렇습니까?

아, 코어 데이터는 기본 키 충돌이 없는지 확인합니다.

8

코어 데이터는 64 비트 정수 기본 키를 사용합니다. I/O 시스템이 CPU와 달리 수십 배의 속도가 빠르지 만 최근 몇 년 간은 수백만 년 동안 최대한 빨리 저장할 수 있습니다.

귀하가 부족할 때 bugreport.apple.com에 버그를 제출하십시오.

관련 문제