우리는 우리는 데이터베이스 또는 RPC 호출에서 올 수있는 데이터 소스 때문에 이러한 서비스를 캐싱 프록시를 생성 한 다음효율적인 데이터 구조는
interface StructureService {
void create(FileEntry entry, EntryType type) throws IOException;
Collection<FileEntry> getChildren(FileEntry entry) throws IOException;
void delete(FileEntry entry) throws IOException;
void rename(FileEntry file, FileEntry newFile) throws IOException;
void copy(FileEntry source, FileEntry destination) throws IOException;
EntryType getType(FileEntry entry);
long getLastModified(FileEntry entry) throws IOException;
long getSize(FileEntry entry) throws IOException;
}
과 같은 서비스 계층을 .
현재 캐시 구현은 수정 작업 후에 전체 캐시를 지우고 다시 작성합니다. 이로 인해 통화를 동기화하여 해결할 수있는 경쟁 조건이 발생했습니다. 그러나 이것은 매우 비효율적입니다.
대신 각 작업의 구조를 수정하고 싶습니다.
이 시나리오에서 도움이 될 수있는 양호한 Java 구현 방법이 있는지 궁금합니다.
우리는 Google 앱 엔진에 memcache를 백엔드로 사용하므로 키 - 값 쌍이있는 각 항목을 저장하면 도움이됩니다.
그래, 이건 구글 앱 엔진에서 구현하기 힘들 것 같아. 그런 식으로 memcache에서 통화를 동기화 할 수 없습니다. 그래도 좋은 답변을 주셔서 감사합니다! – jontro
@Bengt : 고마워요 – helios
음 ... 자물쇠로 임의의 개체를 사용하고 있다면 ... 임의의 ReadWriteLocks를 사용할 수 있습니다 ... 어떤 동기 개체가 있다면 (sync ' 에드 방법 또는 정적 개체 동기화), 당신은 비슷한 것을 사용할 수 있습니다. 그러나 나는 유일한 과정이 위험하다고 생각한다. 그리고 이러한 종류의 잠금은 JVM/ClassLoader에 국한됩니다. – helios