KR101469393B1 - 테이블 이름에 스키마 버전 인코딩 - Google Patents

테이블 이름에 스키마 버전 인코딩 Download PDF

Info

Publication number
KR101469393B1
KR101469393B1 KR1020137001742A KR20137001742A KR101469393B1 KR 101469393 B1 KR101469393 B1 KR 101469393B1 KR 1020137001742 A KR1020137001742 A KR 1020137001742A KR 20137001742 A KR20137001742 A KR 20137001742A KR 101469393 B1 KR101469393 B1 KR 101469393B1
Authority
KR
South Korea
Prior art keywords
version
database
database schema
encoded
table name
Prior art date
Application number
KR1020137001742A
Other languages
English (en)
Other versions
KR20130054325A (ko
Inventor
매튜 볼로한
로버트 크로거
Original Assignee
구글 잉크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 잉크. filed Critical 구글 잉크.
Publication of KR20130054325A publication Critical patent/KR20130054325A/ko
Application granted granted Critical
Publication of KR101469393B1 publication Critical patent/KR101469393B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management
    • G06F16/213Schema design and management with details for schema evolution support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/219Managing data history or versioning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

이 개시물의 주제는, 다른 무엇보다도, 프로세서들, 데이터 저장소, 데이터베이스에 대한 테이블들의 셋트를 정의하는 데이터베이스 스키마의 제 1 버전을 이용하여 데이터 저장소 내에 데이터베이스의 제 1 버전을 생성하고, 명령에 대한 응답인 결과를 수신하도록 구성된 테이블 버전 모듈을 포함하는 디바이스로 구현될 수 있으며, 그 결과가 성공 상태를 가리킬 때, 명령의 수행은 데이터베이스에 들어 있는 데이터로의 액세스 및 데이터베이스 스키마 버전의 확인을 허용하며, 결과는 데이터베이스 스키마 버전 정보를 포함하지 않는다. 디바이스는 데이터에 액세스하기 위한 명령을 수행하기 위한 수단을 더 포함하며, 명령은 하나 이상의 인코딩된 테이블 이름들을 포함하고, 명령에 포함된 인코딩된 테이블 이름들 각각은 적어도 데이터베이스 스키마 버전 식별자에 기초하여 발생된다.

Description

테이블 이름에 스키마 버전 인코딩{ENCODING A SCHEMA VERSION IN TABLE NAMES}
본 개시물은 개인용 컴퓨터들, 태블릿 컴퓨터들, 및 휴대 전화들과 같은 컴퓨팅 디바이스들에 저장된 및/또는 컴퓨팅 디바이스들에 의해 이용된 데이터베이스들에 관한 것이다.
전형적인 네트워크 컴퓨팅 환경에서, 컴퓨팅 디바이스는 하나 이상의 통신 네트워크들을 통해 하나 이상의 외부 디바이스들과 통신할 수도 있다. 예를 들어, 클라이언트 디바이스는 유선 네트워크 또는 무선 네트워크를 통해 서버와 통신할 수도 있다. 일부 경우들에서, 네트워크는 인터넷 (Internet) 을 포함할 수도 있고, 외부 디바이스들은 웹 서버들을 포함할 수도 있다.
일부 디바이스들은 사용자가 데스크탑 컴퓨터들 용으로 이전에 확보된 기능들을 실행하는 것을 허용하면서, 휴대가 가능하다는 이득을 제공한다. 그러나, 일반적으로, 모바일 디바이스들은 데스크탑 컴퓨터들보다 더 느린 프로세서들 및 저장 디바이스들과 같은 좀더 제한된 자원들을 갖는다. 제한된 자원들은 모바일 디바이스들의 가능성들을 제한하거나, 차선의 사용자 경험을 제공할 수도 있다. 일부 모바일 디바이스들은, 인터넷 액세스, 응용프로그램들 수행, 비디오들 및 음악 재생, 뿐만 아니라 종래의 휴대 전화의 기능 제공을 할 수 있다. 예를 들어, 모바일 디바이스는 모바일 디바이스에 표시하기 위해 사용자가 웹사이트에 대한 웹 주소를 입력하여 웹사이트로부터 컨텐츠를 다운로드할 수 있는 웹 브라우저를 모바일 디바이스의 사용자에게 제공할 수 있다.
일부 응용프로그램들 또는 웹사이트들은 응용프로그램 또는 웹사이트에 의해 이용된 정보의 사본을 모바일 디바이스 내에 저장한다. 정보의 로컬 사본은 데이터베이스 스키마의 특정 버전에 상응하는 데이터베이스의 테이블들에 저장될 수도 있다. 종래에는, 응용프로그램이 시동할 때, 응용프로그램은 현재의 데이터베이스 스키마 버전을 결정하기 위한 질의를 수행하고, 만약 현재의 버전이 예상된 버전과 동일하다면, 필요에 따라, 그 다음의 명령들, 예들 들어, 구조화 질의 언어 (SQL: structured query language) 문 (statement) 들을 수행한다.
일반적으로, 이 개시물은 응용프로그램을 개시할 때 이용되는 질의들의 개수를 감소시키기 위해, 데이터베이스 스키마 버전 식별자를 데이터베이스의 테이블 이름들 안에 인코딩하기 위한 기술들을 설명한다. 예를 들어, 응용프로그램을 개시하면, 디바이스는, 데이터 저장소의 데이터베이스 스키마 버전이 예상 데이터베이스 스키마 버전과 동일한지를 먼저 결정하지 않고, 디바이스 내에 위치된 데이터 저장소로부터 실질적인 데이터를 검색하기 위한 초기 질의를 즉시 수행할 수도 있다. 초기 질의는 예상 데이터베이스 스키마 버전이 인코딩된 하나 이상의 테이블 이름들을 포함할 수도 있다. 만약 질의가 오류를 반환한다면, 예상 데이터베이스 스키마 버전은 데이터베이스를 생성하기 위해 이용된 데이터베이스 스키마 버전과 동일하지 않고, 업데이트된 데이터베이스 스키마가 설치된다. 그러나, 만약 질의가 오류 이외의 결과들을 반환한다면, 예상 데이터베이스 스키마 버전은 데이터베이스를 생성하기 위해 이용된 데이터베이스 스키마 버전과 동일하고, 필요에 따라, 응용프로그램은 추가적인 질의들을 수행한다.
일 예시에서, 하나 이상의 프로그램 가능한 프로세서들로 하여금, 데이터베이스에 대한 테이블들의 셋트를 정의하는 데이터베이스 스키마의 제 1 버전을 이용하여 데이터베이스의 제 1 버전을 생성하고, 데이터베이스에 들어 있는 데이터에 액세스하기 위한 명령을 수행하도록 하기 위한 지시들로 인코딩된 컴퓨터-판독가능 저장 매체로서, 명령은 하나 이상의 인코딩된 테이블 이름들을 포함하고, 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각은 적어도 데이터베이스 스키마 버전 식별자에 기초하여 발생된다. 또한, 지시들은 하나 이상의 프로그램 가능한 프로세서들로 하여금 명령에 대한 응답인 결과를 수신하게 하여, 결과가 성공 상태를 가리킬 때, 명령의 수행은 상기 데이터베이스에 들어 있는 데이터에 대한 액세스를 허용하고, 또한, 데이터베이스 스키마의 제 1 버전의 확인을 가능하도록 하는데, 여기서 결과는 데이터베이스 스키마 버전 정보를 포함하지 않는다.
다른 예시에서, 일 방법은 데이터베이스에 대한 테이블들의 셋트를 정의하는 데이터베이스 스키마의 제 1 버전을 이용하여 데이터베이스의 제 1 버전을 생성하는 단계, 및 데이터베이스에 들어 있는 데이터에 액세스하기 위한 명령을 수행하는 단계를 포함하는데, 여기서 명령은 하나 이상의 인코딩된 테이블 이름들을 포함하고, 여기서 명령에 포함된 하나 이상의 인코딩된 테이블 이름들 각각은 적어도 데이터베이스 스키마 버전 식별자에 기초하여 발생된다. 또한, 그 방법은 명령에 대한 응답인 결과를 수신하는 단계를 포함하여, 결과가 성공 상태를 가리킬 때, 명령의 수행은 상기 데이터베이스에 들어 있는 데이터에 대한 액세스를 허용하고, 또한, 데이터베이스 스키마의 제 1 버전의 확인을 가능하도록 하는데, 여기서 결과는 데이터베이스 스키마 버전 정보를 포함하지 않는다.
다른 예시에서, 일 디바이스는 하나 이상의 프로세서들, 데이터를 저장하도록 구성된 데이터 저장소, 및 데이터베이스 스키마의 제 1 버전을 이용하여 상기 데이터 저장소 내에 데이터의 제 1 버전을 생성하도록 구성된 테이블 버전 모듈을 포함하는데, 여기서 데이터베이스 스키마의 제 1 버전은 상기 데이터베이스에 대한 테이블들의 셋트를 정의하고, 명령에 대한 응답인 결과를 수신하여, 결과가 성공 상태를 가리킬 때, 명령의 수행은 데이터베이스에 들어 있는 데이터에 대한 액세스를 허용하고, 또한, 데이터베이스 스키마의 제 1 버전의 확인을 가능하도록 하는데, 여기서 결과는 데이터베이스 스키마 버전 정보를 포함하지 않는다. 또한, 그 디바이스는 데이터베이스에 들어 있는 데이터에 액세스하기 위한 명령을 수행하기 위한 수단을 포함하는데, 여기서 명령은 하나 이상의 인코딩된 테이블 이름들을 포함하고, 여기서 명령에 포함된 하나 이상의 인코딩된 테이블 이름들 각각은 적어도 데이터베이스 스키마 버전 식별자에 기초하여 발생된다.
이 개시물의 기술들은 여러 이점들을 제공할 수도 있다. 예를 들어, 이러한 기술들은, 응용프로그램 시동 중에, 데이터베이스에 저장된 데이터를 검색하고 데이터베이스를 발생시키기 위해 이용된 데이터베이스 스키마 버전을 확인하는 것 양자를 위해, 응용프로그램이 단일 명령, 예를 들어, 단일 질의를 이용할 수 있게 한다. 즉, 이러한 기술들은 응용프로그램 시동 중에 데이터베이스에 대해 수행된 질의들의 개수를 감소시킬 수도 있어, 응용프로그램을 개시하기 위해 요구되는 시간의 양을 줄인다. 명시적 데이터베이스 스키마 버전 검사를 먼저 실행하지 않고 초기 데이터 요청 질의를 수행함으로써, 이 개시물의 기술들은, 데이터베이스 스키마가 변하지 않을 때는 언제나, 최소 또는 어쩌면 무-비용 (zero-cost) 해결책을 제공할 수도 있다. 또한, 응용프로그램 개시 시간을 줄이는 것은 응용프로그램의 응답성을 증가시키는데, 이는 사용자에게 있어서 더 좋은 사용자 경험을 야기할 수도 있다.
하나 이상의 예시들의 세부사항들이 첨부되는 도면들과 하기의 설명에서 제시된다. 다른 특징들, 목적들, 및 이점들은 설명 및 도면들, 그리고 청구항들로부터 명백할 것이다.
도 1 은, 본 개시물의 일 양태에 따른, 클라이언트 디바이스에서 구동하는 응용프로그램들을 갖는 예시적인 네트워킹된 컴퓨팅 환경을 도시하는 블록도이다.
도 2 는, 본 개시물의 일 양태에 따른, 예시적인 클라이언트 디바이스를 도시하는 블록도이다.
도 3a 및 도 3b 는, 본 개시물의 일 양태에 따른, 응용프로그램용 데이터베이스 스키마의 상이한 버전들의 예시들을 도시하는 개념도들이다.
도 4 는, 본 개시물의 일 양태에 따른, 응용프로그램을 로딩하는 예시적인 방법을 도시하는 플로챠트이다.
다양한 도면들에서 유사한 도면 부호들은 유사한 요소들을 가리킨다.
도 1 은, 본 개시물의 일 양태에 따른, 클라이언트 디바이스 (10) 에서 구동하는 응용프로그램들을 갖는 예시적인 네트워킹된 컴퓨팅 시스템 (2) 을 도시하는 블록도이다. 도 1 에 도시된 바와 같이, 컴퓨팅 시스템 (2) 은 디바이스 (10), 하나 이상의 서버들 (12A - 12N) ("서버들 (12)"), 및 네트워크 (14) 를 포함한다. 디바이스 (10) 의 예들은, 그러나 이로 제한되지는 않으며, 휴대 전화들, 휴대 정보 단말기 (PDA: personal digital assistant) 들, 랩탑 컴퓨터들, 휴대용 게임 디바이스들, 휴대용 미디어 재생기들, 전자책 단말기 (e-book reader) 들, 시계들과 같은 휴대용 또는 모바일 디바이스들, 뿐만 아니라 데스크탑 컴퓨터들과 같은 비-휴대용 디바이스들을 포함한다. 이 개시물에서 단지 예시를 위해, 디바이스 (10) 는 사용자가 가지고 다닐 수 있는 휴대용 또는 모바일 디바이스로 설명되나, 이 개시물의 양태들이 휴대용 또는 모바일 디바이스들로 제한되는 것으로 여겨져서는 안된다.
디바이스 (10) 및 서버들 (12) 은 유선 링크들 및/또는 무선 링크들을 통해 네트워크 (14) 에 커플링된다. 디바이스 (10) 는 네트워크 (14) 를 통해 서버들 (12) 로 데이터를 발송하거나 서버들 (12) 로부터 데이터를 수신할 수도 있다. 네트워크 (14) 는 인터넷과 같은 광역 네트워크, 근거리 네트워크 (LAN: local-area network), 기업 네트워크, 또는 하나 이상의 다른 형태들의 네트워크들을 포함할 수도 있다. 서버들 (12) 은 임의의 여러 상이한 형태들의 네트워크 디바이스들일 수도 있다. 예를 들어, 서버들 (12) 은 종래의 웹 서버들, 특화된 미디어 서버들, 피어-대-피어 (peer-to-peer) 방식으로 동작하는 개인용 컴퓨터들, 또는 다른 형태들의 네트워크 디바이스들일 수도 있다.
디바이스 (10) 는 하나 이상의 프로세서들 (20), 저장 디바이스 (22), 배터리 (24), 원격측정 (telemetry) 모듈 (26), 디스플레이 (28), 및 사용자 인터페이스 (30) 를 포함할 수도 있다. 디바이스 (10) 가 휴대 전화인 예시들에서, 디바이스 (10) 는 음성 통신을 위한 마이크 및 스피커 (미도시) 를 포함한다. 배터리 (24) 는 디바이스 (10) 의 모든 다양한 유닛들에 대한 전력을 제공하고, 재충전될 수도 있다. 배터리 (24) 의 예시들은 리튬 폴리머 (lithium polymer) 배터리, 리튬 이온 (ion) 배터리, 니켈 카드뮴 (nickel cadmium) 배터리, 및 니켈 금속 하이브리드 배터리를 포함한다. 사용자 인터페이스 (30) 는 디바이스 (10) 의 사용자, 예를 들어, 사용자 (16) 가 디바이스 (10) 와 교류하는 것을 가능하게 한다. 사용자 인터페이스 (30) 의 예시들은 디바이스 (10) 에 내장된 키패드, 키보드, 마우스, 롤러 볼, 단추들, 사용자 (16) 가 디바이스 (10) 와 교류하는 것을 가능하도록 하는 다른 디바이스들을 포함한다. 일부 예시들에서, 사용자 인터페이스 (30) 는 사용자 (16) 가 음성 명령들을 제공하는 것을 허용하기 위해 마이크를 포함할 수도 있다.
디스플레이 (28) 는 액정 디스플레이 (LCD: liquid crystal display), 전자-잉크 (e-ink), 또는 다른 디스플레이일 수도 있다. 디스플레이 (28) 는 디바이스 (10) 의 컨텐츠를 사용자 (16) 에게 나타낸다. 예를 들어, 디스플레이 (28) 는 웹 브라우저나 비디오 게임과 같은 디바이스 (10) 에서 수행된 응용프로그램들, 서버들 (12) 로부터 검색된 컨텐츠, 및 사용자 (16) 에게 나타내어질 필요가 있을 수도 있는 다른 기능들을 나타낼 수도 있다. 일부 예시들에서, 디스플레이 (28) 는 사용자 인터페이스 (30) 의 기능들의 일부 또는 전부를 제공할 수도 있다. 예를 들어, 디스플레이 (28) 는 사용자 (16) 가 디바이스 (10) 와 교류하는 것을 가능하도록 하는 터치 스크린일 수도 있다.
비록 디바이스 (10) 가 디스플레이 (28) 를 포함하는 것으로 도시되나, 이 개시물의 양태들이 디스플레이 (28) 를 포함하는 예시들로 제한되는 것으로 여겨져서는 안된다. 디바이스 (10) 의 일부 예시들에서, 디스플레이 (28) 는 선택적일 수도 있다. 예를 들어, 만약 디스플레이 (10) 가 음악 재생기 또는 라디오를 포함한다면, 디바이스 (10) 는 디스플레이 (28) 를 포함하지 않을 수도 있다.
저장 디바이스 (22) 는 하나 이상의 프로세서들 (20) 에 의해 수행될 수도 있는 응용프로그램들에 대한 지시들을 저장한다. 다음의 설명에서 단지 예시를 위해, 하나 이상의 프로세서들 (20) 에 의해 수행될 수도 있는 응용프로그램들은 하나의 프로세서 (20) 에 의해 수행되는 것으로 하기에서 설명된다. 응용프로그램들은 네트워크 (14) 를 통해 (예를 들어, 서버들 (12) 중 하나 이상의 서버들로부터) 사용자 (16) 에 의해 다운로딩될 수 있거나, 디바이스 (10) 내에 프로그래밍될 수도 있다. 응용프로그램들은 응용프로그램들을 수행하기 위해 디바이스 (10) 와 교류하는 사용자 (16) 에 응답하여 프로세서 (20) 에 의해 수행될 수도 있다. 또한, 응용프로그램들은, 사용자 (16) 가 디바이스 (10) 를 켤 때, 프로세서 (20) 에 의해 수행될 수도 있다.
또한, 저장 디바이스 (22) 는 프로세서 (20) 가 이 개시물에서 프로세서 (20) 에게 할당된 다양한 기능들을 실행하도록 하는 지시들을 포함할 수도 있다. 저장 디바이스 (22) 는 프로세서 (20) 가 다양한 기능들을 하나 이상의 프로세서들, 예를 들어, 실행하도록 하는 지시들을 포함하는 컴퓨터-판독가능, 기계-판독가능, 또는 프로세서-판독가능 저장 매체를 포함할 수도 있다. 저장 디바이스 (22) 는 랜덤 액세스 메모리 (RAM: random access memory), 읽기-전용 메모리 (ROM: read-only memory), 비-휘발성 RAM (NVRAM: non-volatile RAM), 전기적으로-소거 가능한 프로그램 가능한 ROM (EEPROM: electrically-erasable programmable ROM), 플래시 메모리, 또는 임의의 다른 디지털 매체들과 같은 임의의 휘발성, 비-휘발성, 자기적, 광학적, 또는 전기적 매체들을 포함할 수도 있다. 일부 실시형태들에서, 저장 디바이스 (22) 는 비-일시적/유형의 저장 매체들 중 하나 이상의 매체들을 포함할 수도 있는데, 여기서 그러한 매체들에 저장된 데이터는 변할 수도 변하지 않을 수도 있다 (예를 들어, ROM, RAM).
사용자 (16) 는 저장 디바이스 (22) 에 저장된 응용프로그램들 중 하나 이상의 응용프로그램을 수행하기 위해 사용자 인터페이스 (30) 및/또는 디스플레이 (28) 와 교류할 수도 있다. 일부 응용프로그램들은 디바이스 (10) 가 켜지거나 부팅될 때와 같을 때 디바이스 (10) 에 의해 자동적으로 수행될 수도 있다. 응답으로, 프로세서 (20) 는 사용자 (16) 에 의해 선택된 하나 이상의 응용프로그램들을 수행하거나, 디바이스 (10) 에 의해 수행된 하나 이상의 응용프로그램들을 수행한다. 프로세서 (20) 는 마이크로프로세서, 제어기, 디지털 신호 프로세서 (DSP: digital signal processor), 응용 주문형 집적 회로 (ASIC: application specific integrated circuit), 필드-프로그램 가능한 게이트 어레이 (FPGA: field-programmable gate array), 또는 등가 이산 혹은 집적 논리 회로 중 임의의 하나 이상을 포함할 수도 있다. 또한, 이 개시물에서, 프로세서 (20) 에 따른 기능들은 소프트웨어, 펌웨어, 하드웨어, 또는 그 임의의 조합으로 포함될 수도 있다.
프로세서 (20) 는 단독으로 또는 동시에 응용프로그램들 (32A - 32N) (일괄하여, "응용프로그램들 (32)") 중 하나 이상의 응용프로그램을 수행할 수도 있다. 응용프로그램들 (32) 의 예시들은 웹 브라우저들, 이메일, 주식 시세를 검색하기 위한 프로그램들, 음식점들을 찾기 위한 프로그램들, 현재 또는 미래의 날씨 정보를 검색하는 프로그램들, 게임들, 인터넷을 뒤져보기 위한 프로그램, 뉴스를 제공하는 프로그램, 지도들을 제공하는 프로그램, 및 프로세서 (20) 에 의해 수행되는 다른 프로그램들을 포함한다. 응용프로그램들 (32) 은 사용자 (16) 로부터의 요청에 기초하여 수행될 수도 있고, 사용자 (16) 로부터의 요청에 기초하여 종료될 수도 있다. 일부 응용프로그램들 (32) 은 백그라운드에서 계속하여 구동될 수도 있다. 일부 응용프로그램들 (32) 은 전원이 들어왔을 때와 같을 때 디바이스 (10) 에 의해 자동적으로 수행될 수도 있고, 전원이 나갔을 때와 같을 때 디바이스 (10) 에 의해 자동적으로 종료될 수도 있다.
일부 예시들에서, 프로세서 (20) 에 의해 수행되는 임의의 응용프로그램은 서버들 (12) 중 하나 이상의 서버들로부터의 데이터를 요구할 수도 있다. 원격측정 모듈 (26) 은 데이터에 대한 요청을 전송하고, 서버들 (12) 중 하나 이상의 서버들로부터 데이터를 수신한다. 원격측정 모듈 (26) 은 추가 처리를 위해 수신된 데이터를 프로세서 (20) 에 제공할 수도 있다. 원격측정 모듈 (26) 은 네트워크 (14) 를 통해 하나 이상의 서버들 (12) 로 데이터/요청들을 전송하고 하나 이상의 서버들 (12) 로부터 데이터/응답들을 수신하도록 구성된다. 원격측정 모듈 (26) 은 무선 통신 또는 유선 통신을 지원할 수도 있고, 무선 통신 또는 유선 통신을 제공하기 위해 적절한 하드웨어 및 소프트웨어를 포함한다. 예를 들어, 원격측정 모듈 (26) 은 안테나, 변조기들, 복조기들, 증폭기들, 및 디바이스 (10) 와 서버들 (12) 중 하나 이상의 서버들 사이의 통신을 일으키기 위한 다른 회로를 포함할 수도 있다.
하나의 예시로서, 저장 디바이스 (22) 는 구글 크롬 (Google Chrome) 웹 브라우저, 예를 들어, 응용프로그램 (32A) 과 연관된 응용프로그램 지시들을 저장할 수도 있다. 사용자 (16) 는 웹 브라우저를 수행하기 위해 사용자 인터페이스 (30) 및/또는 디스플레이 (28) 와 교류할 수도 있다. 그 다음에, 프로세서 (20) 는 웹 브라우저 응용프로그램을 수행하여 디스플레이 (28) 가 사용자 (16) 에게 웹 브라우저를 디스플레이하게 한다. 그 다음에, 사용자 (16) 는 디스플레이된 웹 브라우저 안으로, http://www.google.com 과 같은 웹사이트로, 들어가기 위해 사용자 인터페이스 (30) 및/또는 디스플레이 (28) 와 교류할 수도 있다. 이 예시에서, 원격측정 모듈 (26) 은, 요청된 웹사이트에 대해, 네트워크 (14) 를 통해, 서버들 (12) 중 하나 이상의 서버들로 요청을 전송한다. 그 다음에, 디스플레이 (28) 는 사용자 (16) 에게 수신된 웹사이트 컨텐츠를 나타낸다.
일부 예시들에서, 웹사이트는 서버들 (12) 중 하나 이상의 서버들에 의해 호스팅되는 이메일 응용프로그램용 모바일 이메일 인터페이스, 예를 들어, 구글 Gmail 응용프로그램용 모바일 Gmail 인터페이스이다. 간단함을 위해, 이 예시는 이메일 응용프로그램을 호스팅하는 서버 (12A) 에 대하여 설명될 것이다. 다른 예시들에서, 이메일 응용프로그램은, 예를 들어, 클러스터링 (clustering) 또는 다른 분산 응용프로그램 관리 기술들을 이용하여, 서버들 (12) 중 임의의 서버, 또는 서버들 (12) 의 임의의 조합에 의해 호스팅될 수도 있다. 이 예시에서, 원격측정 모듈 (26) 은 모바일 이메일 인터페이스에 대해 서버 (12A) 로 요청을 전송하고, 추가적인 정보를 검색하고 디스플레이 (28) 를 통해 사용자 (16) 에게 정보를 디스플레이하기 위한 컴퓨터 지시들을 수신한다. 서버 (12A) 로부터 검색된 추가적인 정보는 사용자 (16) 에 의해 발송되고 수신된 이메일 메시지들, 첨부물들과 같은 사용자 데이터, 및 구성 정보를 포함할 수도 있다.
모바일 이메일 인터페이스는 디바이스 (10) 가 서버 (12A) 내에 저장된 사용자 데이터의 로컬 사본을 저장하도록 하는 지시들을 포함할 수도 있다. 예를 들어, 사용자 데이터의 로컬 사본은 디바이스 (10) 의 응용프로그램 데이터 저장소 ("APP DATA") (34) 내에 저장될 수도 있다. 응용프로그램 데이터 저장소 (34) 는 데이터베이스, 플랫 (flat) 파일, 테이블, 또는 디바이스 (10) 의 저장 디바이스 (22) 내에 저장된 다른 데이터 구조로 구성될 수도 있다. 일부 예시들에서, 응용프로그램 데이터 저장소 (34) 는 디바이스 (10) 에서 수행하는 응용프로그램들 사이에서 공유된다. 다른 예시들에서, 데이터 저장소를 요구하는, 디바이스 (10) 에서 수행하는 각각의 응용프로그램을 위해 상이한 응용프로그램 데이터 저장소 (34) 가 구성된다. 각각의 응용프로그램 데이터 저장소 (34) 는 상이한 응용프로그램들에 의해 구성되어 관리될 수도 있고, 상이한 방식으로 데이터를 저장할 수도 있다.
예를 들어, 응용프로그램 데이터 저장소 (34) 는 특정 구조를 갖는 하나 이상의 데이터베이스들을 포함하도록 구성될 수도 있다. 각각의 데이터베이스는 디바이스 (10) 에서 수행하는 특정 웹사이트 또는 응용프로그램에 상응할 수도 있다. 일반적으로, 데이터베이스의 구조는 테이블들, 필드들, 테이블들 사이의 관계들, 인덱스들, 및 다른 요소들에 의해 정의된다. 보통, 데이터베이스의 구조는 데이터베이스 스키마라고 지칭된다. 시간이 지남에 따라, 데이터베이스의 구조가 변할 수도 있어, 동일한 데이터베이스에 대해 데이터베이스 스키마의 다수의 버전들을 야기한다. 데이터베이스 스키마의 각각의 버전은 고유 버전 식별자를 가질 수도 있다.
웹 브라우저 응용프로그램이 디바이스 (10) 의 데이터 저장소 내에 모바일 이메일 인터페이스와 연관된 사용자 데이터의 로컬 사본을 저장하도록 하는 지시들을 수신하면, 웹 브라우저 응용프로그램 (예를 들어, 응용프로그램 (32A)) 은, 예를 들어, 테이블 버전 모듈 ("TBL VERSION MODULE") (33) 을 이용하여 데이터베이스를 생성한다. 일반적으로, 테이블 버전 모듈 (33) 은 응용프로그램 (32A) 에 의해 요구되는 데이터베이스의 알맞은 버전이 응용프로그램 데이터 저장소 (34) 내에 유지되는 것을 보장한다. 일부 예시들에서, 테이블 버전 모듈 (33) 은 응용프로그램 (32A) 에 대한 데이터베이스가 맞지 않는 데이터베이스 스키마 버전에 기초한다는 결정에 대한 응답으로 서버들 (12) 중 하나의 서버로부터의 업데이트된 데이터베이스 스키마에 대한 요청을 발생시키도록 구성된다.
이 개시물의 기술들에 따라, 서버들 (12) 중 하나 이상의 서버들, 예를 들어 서버 (12A) 로부터 수신된 데이터베이스 스키마에 기초하여 데이터베이스가 생성된다. 수신된 데이터베이스 스키마에서의 테이블 이름들은 인코딩된 테이블 이름들을 포함할 수도 있다. 일 실시형태에서, 인코딩된 테이블 이름들은 베이스부, 및 서버들 (12) 중 하나 이상의 서버들로부터 수신된 데이터베이스 스키마의 버전을 식별하는 데이터베이스 스키마 버전 식별자를 포함한다. 이 실시형태에서, 데이터베이스 스키마 버전 식별자는 인코딩된 테이블 이름을 발생시키기 위해 베이스부에 첨부된다. 인코딩된 테이블 이름의 베이스부는 보통 상이한 데이터베이스 스키마 버전들 사이에서 변함없이 있는 인코딩된 테이블 이름의 부분이다. 인코딩된 테이블 이름의 베이스부는 데이터베이스 스키마 버전들 사이에서 변하게 될 수도 있으나, 베이스부에 대한 변화들은 특정 스키마 버전을 가리키지는 않는다. 반면에, 인코딩된 테이블 이름의 베이스부에 첨부된 데이터베이스 스키마 버전 식별자는 데이터베이스 스키마 버전이 변할 때마다 변한다. 예를 들어, 만약 데이터베이스 스키마가 버전 2 이면, 인코딩된 테이블 이름의 각각의 베이스부는 베이스부에 첨부된 "_2" 를 가지거나, 버전 3 에 있어서는, 테이블 이름의 각각의 베이스부는 베이스부에 첨부된 "_3" 을 갖는다. 각각의 인코딩된 테이블 이름의 베이스부에 첨부된 버전 식별자는 특정 버전과 연관되는 임의의 스트링일 수도 있다.
다른 실시형태에서, 데이터베이스 스키마에서 각각의 테이블에 대한 인코딩된 테이블 이름은 고유 해시 (unique hash) 를 생성하기 위해, 적어도 데이터베이스 스키마 버전 식별자를 인코딩되지 않은 테이블 이름에 적용함으로써 발생된다. 해시는 인코딩되지 않은 테이블 이름을 키 (key) 와 함께 인코딩함으로써 생성될 수도 있는데, 여기서 키는 데이터베이스 스키마 버전 식별자이다. 일부 예시들에서, 인코딩되지 않은 테이블 이름은 이전의 실시형태에서 설명된 인코딩된 테이블 이름의 베이스부와 동일하다. 즉, 인코딩되지 않은 테이블 이름에 대한 임의의 변화들은 특정 스키마 버전을 가리키지 않는다. 오히려, 인코딩되지 않은 테이블 이름은 데이터베이스 스키마 버전과 상관없이 특정 테이블을 식별할 수도 있다. 일반적으로, 프로그래머가 모바일 이메일 인터페이스와 연관된 데이터베이스 스키마를 업데이트할 때, 프로그래머는 또한 버전 식별자를 업데이트한다. 업데이트된 버전 식별자는, 상술된 바와 같이, 버전 식별자에 의해 식별된 데이터베이스 스키마 버전에 상응하는 인코딩된 테이블 이름들을 발생시키는데 이용된다.
디스플레이 (28) 를 통해 사용자 (16) 에게 모바일 이메일 인터페이스를 디스플레이하기 위해, 웹 브라우저 응용프로그램은 서버들 (12) 중 하나 이상의 서버들, 예를 들어, 서버 (12A) 로부터 수신된 지시들을 처리한다. 수신된 지시들은 웹 브라우저가 모바일 이메일 인터페이스에 대해 생성된 데이터베이스 내에 저장된 사용자 데이터의 로컬 사본으로부터 정보를 검색하도록 하는 지시들을 포함할 수도 있다. 데이터 저장소 내에 저장된 데이터를 검색하기 위해, 구조화 질의어 (SQL: Structured Query Language), 공통 질의어 (CQL: Common Query Language), 객체 질의어 (OQL: Object Query Language), XQuery, 및 XSQL 을 포함하는 다양한 프로그래밍 언어들이 이용될 수도 있으나, 이로 제한되지는 않는다. 데이터 저장소로부터 데이터를 검색하는데 이용된 지시들은 웹 브라우저 응용프로그램에서 정보를 디스플레이하는데 이용된 하나 이상의 상이한 프로그래밍 언어들과 조합될 수도 있다. 모바일 이메일 인터페이스를 디스플레이하기 위한 지시들은, 예를 들어, 하이퍼텍스트 마크업 언어 (HTML: Hypertext Markup Language), 자바스크립트 (JavaScript), PHP 하이퍼텍스트 프로세서 (PHP Hypertext Processor), 자바 (Java), 공통 게이트웨이 인터페이스 (CGI: Common Gateway Interface), 또는 펄 (Perl) 을 이용하여 인코딩될 수도 있다.
디스플레이 지시들을 데이터 검색 지시들과 조합하는 것은 특정 데이터 검색 지시들의 동적 발생을 할 수 있게 한다. 예를 들어, 지시 "'SELECT action FROM action_table' + schema_version + 'WHERE action=2'" 는 SQL 과 자바스크립트의 조합일 수도 있는데, 여기서 "schema_version" 은, 웹 브라우저가 지시들을 수행할 때, 데이터베이스 스키마의 예상된 버전에 상응하는 어떤 값을 대신하는 자바스크립트 변수이고, 여기서 "+" 는 연결에 대한 부호이다. 데이터베이스 스키마의 예상된 버전은 서버 (12A) 로부터 수신된 지시들을 프로그래밍하여 디바이스 (10) 에 의해 처리될 때 이용된 데이터베이스 스키마의 버전이다. 다른 예시에서, 지시 "'SELECT action FROM' + action_table_name + 'WHERE action=2'" 에서는, 변수 "action_table_name" 은 인코딩된 테이블 이름을 대신할 수도 있는데, 여기서 인코딩된 테이블 이름은 웹 브라우저가 지시들을 수행할 때의 고유 해시 값이다.
모바일 웹 인터페이스를 방문하면, 서버 (12A) 로부터 수신된 지시들은 웹 브라우저가, 모바일 이메일 인터페이스에 대한 데이터베이스가 데이터베이스 스키마의 예상된 버전에 기초하는지 또는 데이터베이스가 데이터 저장소 내에 존재하는지를 먼저 결정하지 않고, 데이터베이스를 질의하도록 한다. 프로그래머가 데이터베이스 스키마를 업데이트할 때, 프로그래머는 또한 모바일 이메일 인터페이스에 대한 지시들에 포함된 버전 식별자를 업데이트한다. 지시들에 포함된 업데이트된 데이터베이스 스키마 식별자는 상술된 바와 같이 데이터베이스 스키마의 각각의 버전에 대한 테이블 이름들을 동적으로 발생시키는데 이용될 수도 있다.
이러한 방식에서, 웹 브라우저 응용프로그램은 모바일 이메일 인터페이스에 대한 수신된 지시들을 처리하고, 데이터베이스 스키마 버전을 먼저 검사하지 않고 데이터 저장소를 질의한다. 일반적으로, 응용프로그램들이 개시하거나 웹사이트가 로딩될 때마다 데이터베이스의 현재의 스키마 버전을 검사하는 것은 응용프로그램 개시 시간을 증가시키고 사용자 경험의 질을 감소시킨다. 실질적인 질의들을 수행하기 이전에 데이터베이스 스키마 버전을 검사하지 않음으로써, 응용프로그램 개시 시간은 감소될 수도 있고 사용자 경험의 질은 향상될 수도 있다. 즉, 데이터베이스로부터 데이터를 검색하고, 데이터베이스를 발생시키기 위해 이용된 데이터베이스 스키마 버전이 예상된 스키마 버전과 동일한지를 확인하는 것 양자를 위해, 단일 명령, 예를 들어, 단일 질의를 이용하는 것은, 데이터베이스 스키마 버전을 검사하고, 그 다음에, 데이터베이스로부터 데이터를 검색하기 위해 다수의 명령들을 이용하는 것과 비교하여 응용프로그램 개시 시간을 감소시킬 수도 있다.
데이터베이스 스키마를 먼저 검사하는 대신에, 이 개시물의 기술들은 첨부된 예상 데이터베이스 스키마 버전을 갖는 질의들에 포함된 테이블 이름(들)을 동적으로 발생시킴으로써 현재의 데이터베이스 스키마가 예상 데이터베이스 스키마임을 보장한다. 질의들 안의 테이블 이름들에 데이터베이스 스키마 버전을 첨부함으로써, 만약 모바일 이메일 인터페이스에 대한 데이터베이스가 예상된 스키마 버전으로 발생되지 않았거나 만약 모바일 이메일 인터페이스에 대한 데이터베이스가 아직 생성되지 않았다면, 질의는 오류 상태를 반환할 것이다. 만약 질의가 결과들의 셋트를 반환한다면, 모바일 이메일 인터페이스에 대한 데이터베이스는 존재할 뿐만 아니라 데이터베이스 스키마의 예상된 버전에 기초하여 발생되었다. 데이터베이스 스키마 버전을 테이블 이름들 안에 인코딩하는 것은 모바일 이메일 인터페이스가 질의를 실행하는 것을 생략하고 데이터베이스 스키마 버전을 검사할 수 있게 하여, 응용프로그램 시동 속도를 높인다.
데이터베이스가 아직 존재하지 않을 때, 예를 들어, 사용자 (16) 가 전에 모바일 이메일 인터페이스 웹사이트를 방문하지 않았을 때, 모바일 이메일 인터페이스는 데이터베이스에 대해 제 1 질의를 실행하려고 시도하여 질의에 대한 응답으로 오류 상황을 수신한다. 오류 상황에 응답하여, 웹 브라우저 응용프로그램은 원격측정 모듈 (26) 이 데이터베이스 스키마에 대한 요청을 발송하도록 한다. 서버 (12A) 로부터 데이터베이스 스키마를 수신한 후에, 웹 브라우저 응용프로그램은 데이터베이스 저장소에 데이터베이스 스키마를 적용하여, 데이터베이스 스키마에 기초해 모바일 이메일 인터페이스에 대한 데이터베이스를 생성한다.
웹 브라우저 응용프로그램은 서버 (12A) 로부터 수신된 모바일 이메일 인터페이스에 대한 지시들을 처리하는 것을 계속하여, 원격측정 모듈 (26) 이 서버 (12A) 로 데이터 요청들을 발송하여 그 데이터 요청들에 대한 응답으로 서버 (12A) 로부터 데이터를 수신하도록 한다. 서버 (12A) 로부터 수신된 데이터는 예들로, 이메일, 접속 정보, 구성 설정들, 디스플레이 정보, 및 제어 정보를 포함할 수도 있다. 서버 (12A) 로부터 수신된 정보의 서브셋, 예를 들어, 사용자 데이터는 데이터베이스 스키마에 기초하여 발생된 데이터베이스에 저장된다. 서버 (12A) 로부터 수신된 정보의 다른 부분들은 디스플레이 (28) 를 통해 모바일 이메일 인터페이스를 표현하여 디스플레이하기 위해 웹 브라우저 응용프로그램에 의해 이용될 수도 있다.
사용자 (16) 는 때때로 웹 브라우저 응용프로그램을 이용하여 모바일 이메일 인터페이스를 방문할 수도 있다. 사용자 (16) 가 모바일 이메일 인터페이스를 방문할 때마다, 서버 (12A) 는 웹 브라우저 응용프로그램이 디스플레이 (28) 를 통해 사용자 데이터의 최신 버전과 함께 모바일 이메일 인터페이스의 최신 버전을 표현하여 디스플레이하도록 디바이스 (10) 로 지시들을 발송한다. 가끔, 모바일 이메일 인터페이스 데이터베이스에 대한 데이터베이스 스키마는 변할 수도 있다. 데이터베이스 스키마가 변할 때, 데이터베이스 스키마는 디바이스 (10) 내에 저장된 데이터베이스의 버전과 매칭하지 않을 수도 있어, 로컬 데이터베이스의 예상된 구조와 로컬 데이터베이스의 구조 사이의 불일치를 야기한다. 그러한 불일치가 있을 때, 로컬 데이터 저장소 내에 저장된 사용자 데이터는 모바일 이메일 인터페이스에 의해 예상된 사용자 데이터와 상이할 수도 있다.
예를 들어, 모바일 이메일 인터페이스가 업데이트된 데이터베이스 스키마에 기초하여 정보를 처리하도록 구성되는데 반해, 데이터 저장소는 데이터베이스 스키마의 이전 버전을 갖는 데이터베이스로 구성될 수도 있다. 데이터베이스 스키마의 새로운 버전은 테이블 추가 또는 제거, 테이블 내에 칼럼들 추가 또는 제거, 혹은 테이블의 하나 이상의 칼럼들에 대한 이름 또는 데이터 형태 수정과 같은 데이터베이스 구조에 대한 다양한 수정들을 포함할 수도 있다. 그러므로, 웹 브라우저 응용프로그램에 의해 처리된 지시들은 디바이스 (10) 내에 저장된 데이터 저장소의 버전에 적용될 때 무효한 데이터 검색 지시들을 포함할 수도 있다.
로컬 데이터베이스를 업데이트하기 위해, 디바이스 (10) 는 업데이트된 사용자 데이터를 검색하기 이전에 그리고 디스플레이 (28) 를 통해 모바일 이메일 인터페이스를 완전히 디스플레이하기 이전에 새로운 데이터베이스 스키마에 기초하여 로컬 데이터베이스를 재생성할 수도 있다. 새로운 데이터베이스 스키마는 각각의 테이블 이름에 첨부된 새로운 데이터베이스 스키마 버전을 갖는 새로운 테이블 이름들을 포함한다. 일부 예시들에서, 서버 (12A) 로부터 검색될 필요가 있는 사용자 데이터의 양을 감소시키기 위해, 데이터베이스의 구 (old) 버전으로 저장된 사용자 데이터가 새 데이터베이스로 이동된다. 데이터베이스를 업데이트한 후에, 모바일 이메일 인터페이스에 대해 관련 있는 사용자 데이터를 저장하고 검색하기 위해, 데이터베이스의 테이블 이름들은 예상 데이터베이스 스키마 버전 식별자를 포함하고, 웹 브라우저 응용프로그램은 업데이트된 데이터베이스에 대한 질의들을 처리한다.
웹 브라우저 응용프로그램으로 보여진 모바일 이메일 인터페이스에 대하여 설명되었으나, 로컬 데이터 저장소에 정보를 저장하는 임의의 응용프로그램이 이 개시물의 기술들을 구현할 수도 있다. 예를 들어, 게임 응용프로그램은 사용자 (16) 의 "친구들" 에 관한 정보와 같은 소셜 (social) 네트워크 정보, 및 획득된 고득점들 및 사용자 (16) 와 사용자 (16) 의 "친구들" 에 의해 수신된 상 (award) 들과 같은 게임 통계를 저장할 수도 있다. 게임 응용프로그램이 개시할 때마다, 예를 들어, 사용자 (16) 의 친구들에 대한 업데이트된 소셜 네트워크 정보 및 게임 통계를 다운로드하기 위해, 서버들 (12) 중 하나 이상의 서버들에 연결될 수도 있다. 데이터베이스 스키마 버전이 변할 때, 로컬 저장된 사용자 및 소셜 네트워크 정보를 업데이트하기 위한 지시들에서 인코딩된 버전 식별자도 업데이트된다. 데이터베이스 스키마 버전 식별자를 테이블 이름들 안에 인코딩하는 것은 지시들이 로컬 데이터베이스를 생성하기 위해 이용된 데이터베이스 스키마 버전을 검사하는 것을 생략하고, 대신, 데이터베이스에 대해 제 1 실질적인 질의를 수행할 수 있게 한다.
만약 제 1 질의가 결과들을 반환한다면, 로컬 데이터베이스를 발생시키기 위해 이용된 데이터베이스 스키마는 데이터베이스 스키마의 예상된 버전, 즉, 서버들 (12) 중 하나 이상의 서버들에 구현된 현재의 버전과 동일하다. 데이터베이스 스키마 버전 검사를 생략함으로써, 질의들의 개수가 감소되고 응용프로그램들의 응답성이 증가되어, 더 좋은 최종 사용자 경험을 야기한다. 단일 명령으로 데이터베이스 스키마 버전을 확인하고 데이터베이스로부터 데이터를 검색함으로써 질의들의 개수를 감소시키는 것은, 데이터베이스 스키마 버전을 먼저 검사하고, 그 다음에, 별도의 명령으로, 데이터베이스로부터 데이터를 검색하기 위해 다수의 명령들을 이용하는 것과 비교하여 응용프로그램 시동 시간을 줄일 수도 있다. 그러나, 만약 로컬 데이터베이스를 생성하기 위해 이용된 데이터베이스 스키마 버전이 예상된 버전이 아니라면, 그 다음에, 업데이트된 데이터베이스 스키마가 서버들 (12) 로부터 검색되어 데이터베이스에 적용된다.
도 2 는 본 개시물의 일 양태에 따른, 예시적인 클라이언트 디바이스를 도시하는 블록도이다. 도 2 에 도시된 바와 같이, 저장 디바이스 (22) 는 응용프로그램들 (32) 및 응용프로그램 데이터 저장소 ("APP DATA") (34) 를 포함한다. 도 2 에 도시된 바와 같이, 응용프로그램 데이터 저장소 (34) 는 2 개의 데이터베이스들, 데이터베이스들 35A 및 35B (일괄하여, "데이터베이스들 (35)") 로 구성된 데이터베이스 (미도시) 를 포함하며, 각각의 데이터베이스는 응용프로그램들 (32) 중 하나의 응용프로그램, 예를 들어, 응용프로그램 (32A) 에 대한 데이터베이스 스키마의 상이한 버전에 기초한다. 데이터베이스들 (35) 각각은 테이블들, 각각의 테이블 내의 필드들, 및 테이블들 사이의 관계들을 포함할 수도 있다. 데이터베이스 (35A) 가 기초하는 데이터베이스 스키마 버전은 데이터베이스 (35B) 가 기초하는 데이터베이스 스키마 버전과 비교하여 테이블들, 필드들, 및/또는 관계들의 상이한 조합을 포함한다. 상이한 조합은, 예를 들어, 상이한 필드들, 테이블들, 또는 관계들, 하나 이상의 필드들의 상이한 정의 또는 필드 형태, 다시 이름 붙여진 테이블 또는 필드, 또는 테이블들, 필드들, 또는 관계들의 상이한 개수를 포함할 수도 있다.
일반적으로, 응용프로그램들 (32) 각각은 응용프로그램 데이터 저장소 (34) 내의 응용프로그램들 자체의 각각의 데이터베이스들을 관리한다. 데이터베이스들 (35) 이 응용프로그램 (32A) 을 위해 구성될 때, 응용프로그램 (32A) 의 테이블 버전 모듈 (33) 은 데이터베이스들 (35) 의 발생, 이동, 및 삭제를 관리할 수도 있다. 예시로서, 응용프로그램 (32A) 은, 예를 들어, 처음으로 개시하는 것에 응답하여 데이터 저장소 (34) 내에 데이터베이스, 예를 들어, 데이터베이스 (35A) 를 생성한다. 응용프로그램 (32A) 의 최초 개시 중에, 테이블 버전 모듈 (33) 은 응용프로그램 (32A) 에 대한 데이터베이스가 응용프로그램 데이터 저장소 (34) 내에 존재하지 않는다고 결정하고, 데이터베이스 (35A) 를 생성하기 위해 응용프로그램 (32A) 에 대한 데이터베이스 스키마의 원하는 버전을 데이터 저장소 (34) 에 적용한다. 데이터베이스 (35A) 를 생성하기 위해 데이터베이스 스키마의 원하는 버전을 이용하는 것은, 데이터베이스 (35A) 가 데이터베이스 스키마의 원하는 버전에 의해 정의된 것과 동일한 데이터베이스 구조를 갖도록 한다. 즉, 데이터베이스 (35A) 는 테이블들의 셋트를 포함하는데, 각각의 테이블은 인코딩된 테이블 이름을 갖는다. 각각의 인코딩된 테이블 이름은, 예를 들어, 해시 값을 발생시키기 위해 데이터베이스 스키마 버전 식별자를 인코딩되지 않은 테이블 이름에 적용하거나, 인코딩된 테이블 이름의 베이스부에 데이터베이스 스키마 버전 식별자를 첨부하여 인코딩될 수도 있다. 모든 테이블 이름들의 데이터베이스 스키마 버전 식별자 부분은 데이터베이스 스키마 버전이 변할 때마다 변할 수도 있다.
업데이트가 응용프로그램 (32A) 에 적용된 후 또는 서버들 (12) 중 하나의 서버로부터 수신된 데이터베이스 스키마 버전이 업데이트된 후와 같이 나중에, 응용프로그램 (32A) 은 하나 이상의 인코딩된 테이블 이름들을 포함하는 데이터베이스 (35A) 에 질의를 적용한다. 일 예시에서, 인코딩된 테이블 이름들은 인코딩되지 않은 테이블 이름, 및 데이터베이스 (35A) 를 생성하기 위해 이용된 버전과 동일한 데이터베이스 스키마의 버전을 식별하는 버전 식별자에 기초하여 발생된다. 응용프로그램 (32A) 은 데이터베이스 (35A) 에 질의를 적용하는 것에 대한 응답으로 결과를 수신한다. 데이터베이스 스키마 버전 식별자가 데이터베이스 (35A) 를 생성하기 위해 이용된 것과 동일한 데이터 스키마 버전을 식별하기 때문에, 결과는 성공 상태를 가리킨다. 즉, 단일 질의가 데이터베이스 (35A) 에 저장된 데이터에 대한 액세스를 허용하고, 또한, 결과들에 데이터베이스 스키마 버전을 포함하지 않으면서 데이터베이스 스키마 버전의 확인을 가능하게 한다.
다른 예시에서, 인코딩된 테이블 이름들은 데이터베이스 (35A) 를 생성하기 위해 이용된 버전과 상이한 데이터베이스 스키마 버전에 상응하는 버전 식별자를 이용하여 인코딩된다. 데이터베이스 (35A) 에 질의를 적용하는 것에 대한 응답으로, 응용프로그램 (32A) 은 특정 테이블들이 존재하지 않음을 가리키는 응답을 수신한다. 테이블 버전 모듈 (33) 은 응답을 조사할 수도 있고, 응답이 오류 상태를 가리킨다고 결정한다. 오류 상태는 데이터베이스 (35A) 를 생성하기 위해 이용된 데이터베이스 스키마 버전이 더 이상 예상 데이터베이스 스키마 버전이 아님을 가리킬 수도 있다. 일부 예시들에서, 응용프로그램 (32A) 은 원격측정 모듈 (26) 을 통해 도 1 의 서버들 (12) 중 하나의 서버로부터의 업데이트된 데이터베이스 스키마 버전을 요청한다. 다른 예시들에서, 응용프로그램 (32A) 은 업데이트된 데이터베이스 스키마 버전을 포함한다. 테이블 버전 모듈 (33) 은 데이터베이스 (35B) 를 생성하기 위해 업데이트된 데이터베이스 스키마 버전을 적용한다. 데이터베이스 (35B) 에서의 테이블들의 인코딩된 테이블 이름들은 업데이트된 데이터베이스 스키마에 상응하는 데이터베이스 스키마 버전 식별자를 포함한다.
데이터베이스 (35B) 를 생성한 후에, 테이블 버전 모듈 (33) 은 데이터베이스 (35A) 에 저장된 데이터를 데이터베이스 (35B) 로 이동시킨다. 예를 들어, 만약 데이터베이스 (35B) 의 하나 이상의 테이블들이 데이터베이스 (35A) 에서와 동일한 필드 형태들을 갖는 동일한 필드들을 포함한다면, 테이블 버전 모듈 (33) 은 데이터베이스 (35A) 로부터의 데이터를 데이터베이스 (35B) 안의 상응하는 테이블들에 삽입한다. 다른 예시에서, 만약 하나 이상의 필드 형태들이 변한다면, 데이터베이스 (35A) 와 비교하여 데이터베이스 (35B) 에서 필드가 제거되거나 테이블이 제거되어, 데이터베이스 (35A) 에 저장된 데이터의 적어도 일부분이 데이터베이스 (35B) 로 성공적으로 이동되지 않을 수도 있다. 대신, 응용프로그램 (32A) 은, 예를 들어, 서버들 (12) 중 하나의 서버로부터 데이터베이스 (35B) 로 이동되지 않은 정보를 요청할 수도 있다. 적절한 데이터로 데이터베이스 (35B) 를 채운 (populate) 후에, 응용프로그램 (32A) 은 데이터베이스 (35B) 에 대해 이전에 실패한 질의를 재-적용하여, 질의 결과들을 수신한다.
도 3a 및 도 3b 는, 본 개시물의 일 양태에 따른, 응용프로그램에 대한 데이터베이스 스키마의 상이한 버전들의 예시들을 도시하는 개념도들이다. 도 3a 는 테이블들 (42A - 42C) (일괄하여, "테이블들 (42)") 을 정의하는 데이터베이스 스키마 (40) 의 예시로, 각각의 테이블은 각각의 테이블 이름 (44A - 44C) (일괄하여, "테이블 이름들 (44)") 과 필드들 (46A - 46C) 의 셋트 (일괄하여, "필드들 (46)"), 및 데이터베이스 스키마 (40) 의 특정 버전에 대한 테이블들 (42) 사이의 관계들 (48A 및 48B) 을 갖는다. 이 예시에서, 테이블 (42A) 은 "ItemTbl_v7" 로 이름 붙여지며, 테이블 (42B) 은 "GroupTbl_v7" 로 이름 붙여지고, 테이블 (42C) 은 "LinkTbl_v7" 로 이름 붙여진다. 각각의 테이블 이름은 도 2a 에 도시된 데이터베이스 스키마 (40) 의 버전, 예를 들어, 버전 7 을 고유하게 식별하기 위해 첨부된 "_v7" 를 포함한다. 관계들 (48) 은 테이블들 42A 와 42C 사이뿐만 아니라 테이블들 42A 와 42B 사이에 관계가 존재함을 가리킨다. 관계들 (48) 의 각각은, 예를 들어, 다-대-다, 일-대-다, 또는 일-대-일 관계일 수도 있다.
도 3b 는 데이터베이스 스키마 (50) 의 예시이다. 예를 들어, 데이터베이스 스키마 (50) 는 도 3a 에 도시된 데이터베이스 스키마 (40) 의 상이한 버전이다. 데이터베이스 스키마 (50) 는 테이블들 (52A - 52D) ("테이블들 (52)") 을 정의하는데, 각각의 테이블은 각각의 테이블 이름 (54A - 54D) (일괄하여, "테이블들 (54)") 과 필드들 (56A - 56D) 의 셋트 (일괄하여, "필드들 (56)"), 및 테이블들 (52) 사이의 관계들 (58A - 58C) (일괄하여, "관계들 (58)") 을 갖는다. 이 예시에서, 테이블 (52A) 은 "ItemTbl_v8" 이라고 이름 붙여지며, 테이블 (52B) 은 "GroupTbl_v8" 이라고 이름 붙여지며, 테이블 (52C) 은 "LinkTbl_v8" 이라고 이름 붙여지고, 테이블 (52D) 은 "DetailTbl_v8" 이라고 이름 붙여진다. 각각의 테이블 이름은 이 데이터베이스 스키마 (50) 의 이 버전, 예를 들어, 버전 8 을 고유하게 식별하기 위해 첨부된 "_v8" 을 포함한다. 관계들 (58) 은 테이블들 52A 와 52B, 테이블들 52B 와 52C, 및 테이블들 52B 와 52D 사이에 관계가 존재함을 가리킨다. 관계들 (58) 각각은, 예를 들어, 다-대-다, 일-대-다, 또는 일-대-일 관계일 수도 있다.
도 3a 의 데이터베이스 스키마 (40) 와 데이터베이스 스키마 (40) 의 다음 버전일 수도 있는 도 3b 의 데이터베이스 스키마 (50) 를 비교하면, 데이베이스 스키마 (50) 는 추가적인 테이블, 테이블 (52A) 을 포함하는데, 이 테이블은 데이터베이스 스키마 (40) 와 비교하여 추가적인 정보를 저장하기 위한 추가적인 필드들 (56A) 를 정의한다. 데이터베이스 스키마 (40) 와 비교하여 추가적인 테이블을 포함하는 것으로 도시되긴 하지만, 데이터베이스 스키마 (50) 에 이루어진 임의의 변화가 새로운 데이터베이스 스키마 버전, 및 따라서, 새로운 데이터베이스 스키마 버전에 대한 새로운 테이블 이름들을 발생시키기에 충분할 수도 있다. 예를 들어, 필드들 (56) 내의 필드 형태 또는 하나 이상의 필드들의 이름 변화, 테이블 이름들 (54) 중 하나 이상의 테이블 이름 변화, 필드들 (56) 에 필드 추가 또는 제거, 또는 테이블들 (52) 사이의 하나 이상의 관계들 (58) 재정의는 새로운 데이터베이스 스키마 버전을 발생시키기에 충분할 수도 있다.
데이터베이스 스키마 (40) 에 기초하여 발생된 데이터베이스 및 데이터베이스 스키마 (50) 에 기초하여 발생된 데이터베이스로부터의 데이터를 저장하고 검색하기 위한 지시들은 실질적으로 유사할 수도 있다. 예를 들어, 지시들은, 동적 테이블 이름 붙이기 규정을 가능하게 하기 위해, 상술된 바와 같이, 프로그래밍 언어들의 조합을 포함할 수도 있다. 일 예시에서, 지시들은 변수, 예를 들어, 예상 데이터베이스 스키마 버전 수를 저장하도록 정의된 "schema_version" 을 포함한다. 지시, "'SELECT description, id FROM ItemTbl'+ schema_version + 'WHERE id=3'" 은, "schema_version" 변수 내에 정의된 예상 데이터베이스 스키마 버전에 기초하여 적절한 테이블 이름을 동적으로 발생시키기 위해 SQL 을 자바스크립트와 조합하는 지시의 일 예시이다. 이 예시에서, 도 3a 에 도시된 데이터베이스 스키마가 예상 데이터베이스 스키마 버전일 때, "schema_version" 은 값 "_v7" 로 설정된다. 유사하게, 도 3b 에 도시된 데이터베이스 스키마가 예상 데이터베이스 스키마 버전일 때, "schema_version" 은 값 "_v8" 로 설정된다.
일 예시에서, 도 1 의 사용자 (16) 는, 먼저, 도 3a 의 데이터베이스 스키마 (40) 로 도시된 구조를 갖는 데이터베이스를 요구하는 응용프로그램을 개시한다. 데이터베이스는 도 3a 에 도시된 데이터베이스 스키마 버전 7 (예를 들어, "_v7" 에 기초하여 발생된다. 응용프로그램은, 상술된 바와 같이, 현재 예상 데이터베이스 스키마 버전으로 설정되는 변수를 이용하여 각각의 테이블 이름의 끝에 예상 데이터베이스 스키마 버전을 첨부하는 명령들을 이용해 데이터베이스를 질의할 수도 있다. 사용자 (16) 가 응용프로그램을 이용하는 것을 완료한 후에, 응용프로그램은 중지한다. 사용자가 응용프로그램을 다시 개시하기에 앞서, 예상 데이터베이스 스키마 버전이 변하는데, 예를 들어, 데이터베이스 스키마는 도 3b 의 데이터베이스 스키마 (50) 로 도시된 바와 같은 버전 8 (예를 들어, "_v8") 로 업데이트된다. 데이터베이스 스키마는 업데이트될 수도 있는데, 예를 들어, 사용자가 디바이스 (10) 내에 저장된 응용프로그램을 새로운 버전으로 업데이트했거나, 도 1 의 서버들 (12) 중 하나의 서버에 있는 응용프로그램의 컴포넌트가 업데이트되었기 때문이다.
업데이트한 후에 응용프로그램을 개시하면, 동적으로 발생된 테이블 이름들은 기존의 데이터베이스의 테이블 이름들에 매칭하지 않을 수도 있는데, 예를 들어, "schema_version" 변수가 "_v7" 에서 "_v8" 로 업데이트되었기 때문이다. 이 예시에서, 질의 "'SELECT description, id FROM ItemTbl'+ schema_version + 'WHERE id=3'" 은 테이블 이름 "ItemTbl_v8" 을 발생시켜, 이름 "ItemTbl_v8" 을 갖는 테이블로부터 정보를 검색하려고 시도할 것이다. 그러나, 응용프로그램에 대한 데이터베이스가 여전히 데이터베이스 스키마의 버전 7 에 기초하므로, 테이블 이름들 "ItemTbl_v8" 을 포함하지 않는다. 테이블이 데이터베이스에 존재하지 않기 때문에, 질의는 오류를 반환한다.
오류에 응답하여, 응용프로그램은, 새로운 데이터베이스를 생성하기 위해, 데이터베이스 스키마의 새로운 버전, 예를 들어, 도 3b 의 데이터베이스 스키마 (50) 로 도시된 바와 같은 버전 8 을 적용한다. 새로운 데이터베이스는 매회의 이름에 첨부된 예상 데이터베이스 스키마 버전 식별자, 예를 들어, "_v8" 을 갖는 테이블들을 포함한다. 데이터베이스 스키마의 예상된 버전에 기초하여 데이터베이스를 생성한 후에, 데이터베이스의 이전 버전으로 저장된 데이터는 새로운 데이터베이스로 이동될 수도 있다. 도 3a 및 도 3b 에 도시된 바와 같이, 도 3a 의 테이블들 (52A - 52C) 은 도 3b 에서의 상응하는 테이블들 (52B - 52D) 과 동일하다. 즉, 테이블 42A 및 52B 각각은 필드들 46A 및 56A 내에 정의된 것과 동일한 필드들을 가지며, 테이블들 42B 및 52C 각각은 필드들 46B 및 56C 내에 정의된 것과 동일한 필드들을 가지고, 테이블들 42C 및 52D 각각은 필드들 46C 및 56D 내에 정의된 것과 동일한 필드들을 갖는다. 그러므로, 데이터는 이전 데이터베이스 안의 테이블들 (42) 로부터 새로운 데이터베이스 안의 상응하는 테이블들 (52) 로 이동될 수도 있다. 데이터 이동이 완료된 후에, 응용프로그램은 질의를 재-수행할 수도 있다. 테이블 "ItemTbl_v8" 이 이제 데이터베이스 내에 존재하기 때문에, 질의는 더 이상 무효한 테이블 이름으로 인한 오류를 반환하지 않을 것이고, 일반적으로, 성공하여 결과들의 셋트를 반환할 것이다.
도 4 는, 본 개시물의 일 양태에 따른, 응용프로그램을 로딩하는 예시적인 방법을 도시하는 플로챠트이다. 단지 예시를 위해, 도 3 의 방법은 도 1 의 컴퓨팅 시스템 (2) 에 대하여 설명되나, 다양한 다른 시스템들 및/또는 디바이스들이 도 4 에 도시된 방법을 구현하거나 실행하기 위해 이용될 수도 있다.
사용자 (16) 는 디바이스 (10) 와 교류하여 응용프로그램 (32A) 을 개시한다 (60). 일 예시에서, 응용프로그램 (32A) 은 사용자 (16) 가 웹사이트로 향하게 하는 웹 브라우저이고, 웹사이트는 응용프로그램 데이터 (34) 의 데이터베이스 내에 사용자 정보의 로컬 사본을 저장하도록 구성된다. 원격측정 모듈 (26) 은 서버들 (12) 중 하나 이상의 서버들로 정보에 대한 요청을 발송하여, 서버들 (12) 중 하나 이상의 서버들로부터 정보를 수신한다. 수신된 정보는 응용프로그램 (32A) 이 디스플레이 (28) 를 통하여 웹사이트를 표현하여 디스플레이하도록 하는 지시들을 포함한다. 수신된 정보의 일부분은 응용프로그램 (32A) 이 응용프로그램 데이터 (34) 의 데이터베이스로부터 정보의 셋트를 검색하도록 하는 지시들을 포함한다.
그 다음에, 응용프로그램 (32A) 은 초기 질의 (62) 를 발생시키기 위해 지시들을 수행한다. 상술된 바와 같이, 질의는 동적으로 발생된 테이블 이름들을 포함할 수도 있다. 발생된 테이블 이름들은 새로운 데이터베이스 스키마 버전이 서버들 (12) 중 하나 이상의 서버들에서 구현될 때마다 변하게 되는 데이터베이스 스키마 버전 식별자가 첨부되는 테이블 이름의 베이스부를 포함한다. 첨부된 데이터베이스 스키마 버전 식별자는 수신된 지시들에 포함되고, 수신된 지시들을 프로그래밍할 때 이용된 데이터베이스 스키마 버전에 상응한다. 즉, 예상 데이터베이스 스키마 버전은 수신된 지시들이 기초하는 특정 데이터베이스 구조이다. 만약 저장 디바이스 (22) 내에 저장된 데이터베이스가 예상 데이터베이스 스키마 버전과 동일한 구조를 갖지 않는다면, 지시들을 실행하는 것은 예측할 수 없는 결과들을 낳을 수도 있거나, 다양한 오류 상태들을 야기할 수도 있다.
응용프로그램 (32A) 은 발생된 질의 (64) 를 수행하여 질의로부터의 결과들을 수신한다 (66). 결과들은, 예를 들어, 데이터베이스로부터 수신된 데이터, 어떠한 데이터도 질의에 매칭하지 않았다는 표시, 또는 오류 상태의 표시를 포함할 수도 있다. 응용프로그램 (32A) 은 결과들을 처리하여 결과들이 오류 상태를 가리키는지를 결정한다 (68). 만약 결과들이 오류 상태를 가리키지 않는다면 (68 의 "NO" 브랜치), 그 다음에, 응용프로그램 (32A) 은 응용프로그램 (32A) 의 기능들을 수행하기 위해, 필요에 따라 데이터베이스에 대한 질의들을 처리하는 것을 계속한다 (74). 예를 들어, 만약 결과들이 데이터 또는 어떠한 데이터도 질의에 매칭하지 않았다는 표시를 포함한다면, 결과들은 오류 상태를 가리키지 않는다.
만약 결과들이 오류 상태를 가리킨다면 (68의 "YES" 브랜치), 응용프로그램 (32A) 은 서버들 (12) 중 하나의 이상의 서버로부터 새로운 데이터베이스 스키마를 검색한다 (70). 응용프로그램 (32A) 은 원격측정 모듈 (26) 이 수신된 지시들에서 가리켜진 예상 데이터베이스 스키마 버전에 상응하는 데이터베이스 스키마 버전에 대한 요청을 서버들 (12) 중 하나 이상의 서버들로 발송하도록 한다. 그 다음에, 원격측정 모듈 (26) 은 서버들 (12) 중 하나 이상의 서버들로부터 새로운 데이터베이스 스키마를 수신하여, 응용프로그램 (32A) 으로 새로운 데이터베이스 스키마를 전달한다.
그 다음에, 응용프로그램 (32A) 은 새로운 데이터베이스 스키마에 기초하여 새로운 데이터베이스를 발생시키기 위해 새로운 데이터베이스 스키마를 적용한다 (72). 새로운 데이터베이스는 첨부된 예상 데이터베이스 스키마 버전을 갖는 이름들을 구비한 테이블들을 포함한다. 만약 가능하다면, 응용프로그램 (32A) 은 데이터베이스의 구 버전으로 저장된 데이터를 새로운 데이터베이스로 이동시킨다 (74). 만약 데이터가 새로운 데이터베이스로 성공적으로 이동된다면 (74의 "YES" 브랜치), 응용프로그램 (32A) 은 응용프로그램 (32A) 에 의해 원래 요청된 데이터를 검색하기 위해 초기 질의를 재-수행할 수도 있다 (76). 초기 질의를 재-수행한 (76) 후에, 응용프로그램 (32A) 은 지시들을 수행하는 것을 계속하고, 요구에 따라 새로운 데이터베이스에 대해 추가적인 질의들을 수행할 수도 있다 (78). 만약 데이터가 새로운 데이터베이스로 이동되지 않는다면 (74 의 "NO" 브랜치), 그 다음에, 응용프로그램 (32A) 은 텅 비어있는 새로운 데이터베이스의 테이블들에 기초하여 계속 진행할 수 있는데, 예를 들어, 응용프로그램 (32A) 은, 예를 들어, 서버들 (12) 중 하나 이상의 서버들로부터의 데이터로 새로운 데이터베이스를 채우기 위해 질의들을 수행할 수도 있고, 응용프로그램 (32A) 의 다양한 기능들을 실행하기 위해 필요에 따라 새로운 데이터베이스에 대해 추가적인 질의들을 수행할 수도 있다 (78).
이러한 방식으로, 일부 경우들에서, 데이터베이스 스키마가 변하는 사이에 각각의 응용프로그램 시동 동안 로컬 데이터베이스가 예상 데이터베이스 스키마 버전과 동일한 데이터베이스 스키마 버전에 기초함을 확인하기 위해, 이 개시물의 기술들은 최소의 또는 심지어 실질적으로 무-비용 해결책을 제공할 수도 있다. 즉, 그 기술들은 단일 명령으로 데이터베이스 스키마 버전을 확인하고 데이터베이스로부터 데이터를 검색하여, 응용프로그램이 응용프로그램 시동 시에 명시적 데이터베이스 스키마 버전 검사를 수행하는 것을 생략할 수 있게 함으로써, 데이터베이스 스키마 버전을 먼저 검사하고 그 다음에 데이터베이스로부터 데이터를 검색하기 위해 다수의 명령들을 이용하는 것과 비교하여, 응용프로그램 시동 중에 요구되는 질의들의 개수를 감소시키고 더 빠른 응용프로그램 시동을 가능하게 한다. 데이터베이스 스키마 버전이 변했을 때, 즉, 데이터베이스 구조가 예상 데이터베이스 스키마 버전과 동일하지 않은 데이터베이스 스키마 버전에 상응할 때, 그 기술은 종래의 해결책들과 비교하여 추가적인 오버헤드 없이 데이터베이스 스키마를 예상 데이터베이스 스키마 버전으로 바꿀 수도 있다. 그러므로, 응용프로그램 시동의 전체적인 효율성이 향상될 수도 있다.
여기에 설명된 기술들은 하드웨어, 소프트웨어, 펌웨어, 또는 그 임의의 조합으로 구현될 수도 있다. 모듈들, 유닛들, 또는 컴포넌트들로 설명된 다양한 특징들은 집적 논리 디바이스와 함께 또는 별도로 분리되나 상호운용이 가능한 논리 디바이스들이나 다른 하드웨어 디바이스들로 구현될 수도 있다. 일부 경우들에서, 전자 회로의 다양한 특징들은 집적 회로 칩 또는 칩셋과 같은 하나 이상의 집적 회로 디바이스들로 구현될 수도 있다.
만약 하드웨어로 구현된다면, 이 개시물은 프로세서 또는 집적 회로 칩 또는 칩셋과 같은 집적 회로 디바이스와 같은 장치들에 관한 것일 수도 있다. 대안으로 또는 추가적으로, 만약 소프트웨어나 펌웨어로 구현된다면, 그 기술들은, 수행될 때, 프로세서가 상술된 방법들 중 하나 이상의 방법들을 실행하도록 하는 지시들을 포함하는 컴퓨터-판독가능 데이터 저장 매체에 의해 적어도 부분적으로 실현될 수도 있다. 예를 들어, 컴퓨터-판독가능 데이터 저장 매체는 프로세서로 수행하기 위한 그러한 지시들을 저장할 수도 있다.
컴퓨터-판독가능 매체는 패키징 재료들을 포함할 수도 있는 컴퓨터 프로그램 제품의 일부를 형성할 수도 있다. 컴퓨터-판독가능 매체는 RAM, ROM, NVRAM, EEPROM, 플래시 메모리, 자기적 또는 광학적 데이터 저장 매체, 등과 같은 컴퓨터 데이터 저장 매체를 포함할 수도 있다. 추가적으로, 또는 대안적으로, 그 기술들은, 지시들이나 데이터 구조들의 형태로 코드를 나르거나 통신하고, 컴퓨터에 의해 액세스, 판독, 및/또는 수행될 수 있는 컴퓨터-판독가능 통신 매체에 의해 적어도 부분적으로 실현될 수도 있다.
코드나 지시들은 DSP들, 범용 마이크로프로세서들, ASIC들, FPGA들, 또는 다른 등가 집적 또는 이산 논리 회로와 같은 하나 이상의 프로세서들을 포함하는 처리 회로들에 의해 수행되는 소프트웨어 및/또는 펌웨어일 수도 있다. 그에 따라, 여기서 이용된 용어 "프로세서" 는 앞서 언급된 구조들 중 임의의 구조 또는 여기서 설명된 기술들을 구현하기에 적합한 임의의 다른 구조들을 지칭하는 것일 수도 있다. 또한, 일부 양태에서, 이 개시물에 설명된 기능은 소프트웨어 모듈들 또는 하드웨어 모듈들 내에 제공될 수도 있다.
본 개시물의 다양한 실시형태들이 설명되었다. 이러한 실시형태들 및 다른 실시형태들은 다음의 청구항들의 범위 내에 있다.

Claims (20)

  1. 컴퓨터-판독가능 저장 매체로서,
    상기 컴퓨터-판독가능 저장 매체는,
    하나 이상의 프로그램 가능한 프로세서들로 하여금,
    데이터베이스에 대한 테이블들의 셋트를 정의하는 데이터베이스 스키마의 제 1 버전을 이용하여 상기 데이터베이스의 제 1 버전을 생성하도록 하고;
    상기 데이터베이스에 들어 있는 정보에 액세스하기 위한 명령을 수행하도록 하며;
    상기 명령에 대한 응답인 결과를 수신하도록 하기 위한 지시들로 인코딩되고,
    상기 데이터베이스의 상기 테이블들의 셋트의 각각의 테이블은 인코딩된 테이블 이름을 포함하며, 각각의 테이블의 상기 인코딩된 테이블 이름은 인코딩되지 않은 테이블 이름, 및 상기 데이터베이스 스키마의 상기 제 1 버전을 식별하는 데이터베이스 스키마 버전 식별자에 기초하여 발생되고,
    상기 명령은 하나 이상의 인코딩된 테이블 이름들을 포함하고, 상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각은 적어도 데이터베이스 스키마 버전 식별자에 기초하여 발생되고,
    상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각이 1) 상기 테이블들의 셋트와 연관된 상기 인코딩되지 않은 테이블 이름들 중 하나, 및 2) 상기 데이터베이스 스키마의 상기 제 1 버전을 식별하는 상기 데이터베이스 스키마 버전 식별자에 기초하여 발생될 때, 상기 결과는 성공 상태를 가리키고 상기 데이터베이스에 들어 있는 상기 정보의 세트를 포함하며, 상기 결과는 상기 데이터베이스 스키마의 상기 제 1 버전의 확인을 허용하는, 컴퓨터-판독가능 저장 매체.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 하나 이상의 프로그램 가능한 프로세서들로 하여금,
    상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각이 인코딩되지 않은 테이블 이름, 및 상기 제 1 버전과 상이한 상기 데이터베이스 스키마의 제 2 버전을 식별하는 데이터베이스 스키마 버전 식별자에 기초하여 발생될 때, 상기 결과가 오류 상태를 가리킨다고 결정하도록 하고;
    상기 결과가 상기 오류 상태를 가리킨다고 결정하는 것에 대한 응답으로 상기 데이터베이스 스키마의 상기 제 2 버전을 이용하여 상기 데이터베이스의 제 2 버전을 생성하도록 하기 위한 지시들로 더 인코딩되는, 컴퓨터-판독가능 저장 매체.
  4. 제 3 항에 있어서,
    상기 데이터베이스 스키마의 상기 제 2 버전은 인코딩된 테이블 이름을 각각 갖는 테이블들의 제 2 셋트를 정의하며,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 테이블의 상기 인코딩된 테이블 이름은 제 1 부분 및 제 2 부분을 포함하며,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 인코딩된 테이블 이름의 상기 제 1 부분은 상기 데이터베이스 스키마의 상기 제 1 버전에서 상응하는 테이블의 상기 인코딩된 테이블 이름의 상기 제 1 부분과 동일하고,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 인코딩된 테이블 이름의 상기 제 2 부분은 상기 데이터베이스 스키마의 상기 제 2 버전을 식별하는 상기 데이터베이스 스키마 버전 식별자를 포함하는, 컴퓨터-판독가능 저장 매체.
  5. 제 3 항에 있어서,
    상기 하나 이상의 프로그램 가능한 프로세서들로 하여금, 네트워크를 통해 서버로부터 상기 데이터베이스 스키마의 상기 제 2 버전을 검색하도록 하기 위한 지시들로 더 인코딩되는, 컴퓨터-판독가능 저장 매체.
  6. 제 3 항에 있어서,
    상기 하나 이상의 프로그램 가능한 프로세서들로 하여금, 상기 데이터베이스 스키마의 상기 제 1 버전을 이용하여 생성된 데이터베이스 내에 저장된 데이터를 상기 데이터베이스 스키마의 상기 제 2 버전을 이용하여 생성된 데이터베이스로 이동시키도록 하기 위한 지시들로 더 인코딩되는, 컴퓨터-판독가능 저장 매체.
  7. 제 1 항에 있어서,
    각각의 테이블의 상기 인코딩된 테이블 이름은 고유 해시 (hash) 를 생성하기 위해 적어도 상기 데이터베이스 스키마 버전 식별자를 상기 인코딩되지 않은 테이블 이름에 적용함으로써 발생되는, 컴퓨터-판독가능 저장 매체.
  8. 제 1 항에 있어서,
    각각의 테이블의 상기 인코딩된 테이블 이름은 제 1 부분 및 제 2 부분을 포함하며, 각각의 인코딩된 테이블 이름의 상기 제 1 부분은 상기 인코딩되지 않은 테이블 이름을 포함하고, 각각의 인코딩된 테이블 이름의 상기 제 2 부분은 상기 데이터베이스 스키마 버전 식별자를 포함하는, 컴퓨터-판독가능 저장 매체.
  9. 제 1 항에 있어서,
    상기 명령은 응용프로그램 시동에 응답하여 수행된 응용프로그램의 초기 명령인, 컴퓨터-판독가능 저장 매체.
  10. 데이터베이스에 대한 테이블들의 셋트를 정의하는 데이터베이스 스키마의 제 1 버전을 이용하여 상기 데이터베이스의 제 1 버전을 생성하는 단계로서, 상기 데이터베이스의 상기 테이블들의 셋트의 각각의 테이블은 인코딩된 테이블 이름을 포함하며, 각각의 테이블의 상기 인코딩된 테이블 이름은 인코딩되지 않은 테이블 이름, 및 상기 데이터베이스 스키마의 상기 제 1 버전을 식별하는 데이터베이스 스키마 버전 식별자에 기초하여 발생되는, 상기 데이터 베이스의 제 1 버전을 생성하는 단계;
    상기 데이터베이스에 들어 있는 정보에 액세스하기 위한 명령을 수행하는 단계로서, 상기 명령은 하나 이상의 인코딩된 테이블 이름들을 포함하고, 상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각은 적어도 데이터베이스 스키마 버전 식별자에 기초하여 발생되는, 상기 데이터베이스 안에 들어 있는 정보에 액세스하기 위한 명령을 수행하는 단계; 및
    상기 명령에 대한 응답인 결과를 수신하는 단계로서, 상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각이 1) 상기 테이블들의 셋트와 연관된 상기 인코딩되지 않은 테이블 이름들 중 하나, 및 2) 상기 데이터베이스 스키마의 상기 제 1 버전을 식별하는 상기 데이터베이스 스키마 버전 식별자에 기초하여 발생될 때, 상기 결과는 성공 상태를 가리키고 상기 데이터베이스에 들어 있는 상기 정보의 세트를 포함하며, 상기 결과는 상기 데이터베이스 스키마의 상기 제 1 버전의 확인을 허용하는, 상기 명령에 대한 응답인 결과를 수신하는 단계를 포함하는, 방법.
  11. 삭제
  12. 제 10 항에 있어서,
    상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각이 인코딩되지 않은 테이블 이름, 및 상기 제 1 버전과 상이한 상기 데이터베이스 스키마의 제 2 버전을 식별하는 데이터베이스 스키마 버전 식별자에 기초하여 발생될 때, 상기 결과가 오류 상태를 가리킨다고 결정하는 단계; 및
    상기 결과가 상기 오류 상태를 가리킨다고 결정하는 것에 대한 응답으로 상기 데이터베이스 스키마의 상기 제 2 버전을 이용하여 상기 데이터베이스의 제 2 버전을 생성하는 단계를 더 포함하는, 방법.
  13. 제 12 항에 있어서,
    상기 데이터베이스 스키마의 상기 제 2 버전은 인코딩된 테이블 이름을 각각 갖는 테이블들의 제 2 셋트를 정의하며,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 테이블들의 상기 인코딩된 테이블 이름은 제 1 부분 및 제 2 부분을 포함하며,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 인코딩된 테이블 이름의 상기 제 1 부분은 상기 데이터베이스 스키마의 상기 제 1 버전에서 상응하는 테이블의 상기 인코딩된 테이블 이름의 상기 제 1 부분과 동일하고,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 인코딩된 테이블 이름의 상기 제 2 부분은 소스 데이터베이스 스키마의 상기 제 2 버전을 식별하는 상기 데이터베이스 스키마 버전 식별자를 포함하는, 방법.
  14. 제 10 항에 있어서,
    각각의 테이블의 상기 인코딩된 테이블 이름은 고유 해시 (hash) 를 생성하기 위해 적어도 상기 데이터베이스 스키마 버전 식별자를 상기 인코딩되지 않은 테이블 이름에 적용함으로써 발생되는, 방법.
  15. 제 10 항에 있어서,
    각각의 테이블의 상기 인코딩된 테이블 이름은 제 1 부분 및 제 2 부분을 포함하며, 각각의 인코딩된 테이블 이름의 상기 제 1 부분은 상기 인코딩되지 않은 테이블 이름을 포함하고, 각각의 인코딩된 테이블 이름의 상기 제 2 부분은 상기 데이터베이스 스키마 버전 식별자를 포함하는, 방법.
  16. 제 10 항에 있어서,
    상기 명령은 응용프로그램 시동에 응답하여 수행된 응용프로그램의 초기 명령인, 방법.
  17. 하나 이상의 프로세서들;
    데이터를 저장하도록 구성된 데이터 저장소;
    데이터베이스에 대한 테이블들의 셋트를 정의하는 데이터베이스 스키마의 제 1 버전을 이용하여 상기 데이터 저장소 내에 상기 데이터베이스의 제 1 버전을 생성하도록 구성된 테이블 버전 모듈로서, 상기 데이터베이스의 상기 테이블들의 셋트의 각각의 테이블은 인코딩된 테이블 이름을 포함하며, 각각의 테이블의 상기 인코딩된 테이블 이름은 인코딩되지 않은 테이블 이름, 및 상기 데이터베이스 스키마의 상기 제 1 버전을 식별하는 데이터베이스 스키마 버전 식별자에 기초하여 발생되는, 상기 테이블 버전 모듈; 및
    상기 데이터베이스에 들어 있는 정보에 액세스하기 위한 명령을 수행하도록 구성된 애플리케이션으로서, 상기 명령은 하나 이상의 인코딩된 테이블 이름들을 포함하고, 상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각은 적어도 데이터베이스 스키마 버전 식별자에 기초하여 발생되는, 상기 애플리케이션을 포함하고,
    상기 테이블 버전 모듈은, 상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각이 1) 상기 테이블들의 셋트와 연관된 상기 인코딩되지 않은 테이블 이름들 중 하나, 및 2) 상기 데이터베이스 스키마의 상기 제 1 버전을 식별하는 상기 데이터베이스 스키마 버전 식별자에 기초하여 발생될 때, 결과가 성공 상태를 가리키고 상기 데이터베이스에 들어 있는 상기 정보의 세트를 포함하도록, 명령에 대한 응답인 상기 결과를 수신하도록 더 구성되고, 상기 결과는 상기 데이터베이스 스키마의 상기 제 1 버전의 확인을 허용하는, 디바이스.
  18. 삭제
  19. 제 17 항에 있어서,
    상기 테이블 버전 모듈은, 상기 명령에 포함된 상기 하나 이상의 인코딩된 테이블 이름들 각각이 인코딩되지 않은 테이블 이름, 및 상기 제 1 버전과 상이한 상기 데이터베이스 스키마의 제 2 버전을 식별하는 데이터베이스 스키마 버전 식별자에 기초하여 발생될 때, 상기 결과가 오류 상태를 가리킨다고 결정하고, 상기 결과가 상기 오류 상태를 가리킨다고 결정하는 것에 대한 응답으로 상기 데이터베이스 스키마의 제 2 버전을 이용하여 상기 데이터베이스의 제 2 버전을 생성하도록 더 구성되는, 디바이스.
  20. 제 19 항에 있어서,
    상기 데이터베이스 스키마의 상기 제 2 버전은 인코딩된 테이블 이름을 각각 갖는 테이블들의 제 2 셋트를 정의하며,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 테이블의 상기 인코딩된 테이블 이름은 제 1 부분 및 제 2 부분을 포함하며,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 인코딩된 테이블 이름의 상기 제 1 부분은 상기 데이터베이스 스키마의 상기 제 1 버전에서 상응하는 테이블의 상기 인코딩된 테이블 이름의 상기 제 1 부분과 동일하고,
    상기 데이터베이스 스키마의 상기 제 2 버전에서 각각의 인코딩된 테이블 이름의 상기 제 2 부분은 소스 데이터베이스 스키마의 상기 제 2 버전을 식별하는 상기 데이터베이스 스키마 버전 식별자를 포함하는, 디바이스.
KR1020137001742A 2010-07-23 2011-07-20 테이블 이름에 스키마 버전 인코딩 KR101469393B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/842,771 2010-07-23
US12/842,771 US8244698B2 (en) 2010-07-23 2010-07-23 Encoding a schema version in table names
PCT/US2011/044706 WO2012012551A1 (en) 2010-07-23 2011-07-20 Encoding a schema version in table names

Publications (2)

Publication Number Publication Date
KR20130054325A KR20130054325A (ko) 2013-05-24
KR101469393B1 true KR101469393B1 (ko) 2014-12-04

Family

ID=44546128

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137001742A KR101469393B1 (ko) 2010-07-23 2011-07-20 테이블 이름에 스키마 버전 인코딩

Country Status (5)

Country Link
US (3) US8244698B2 (ko)
EP (1) EP2596442B1 (ko)
KR (1) KR101469393B1 (ko)
CN (1) CN103109290B (ko)
WO (1) WO2012012551A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10016617B2 (en) 2009-11-11 2018-07-10 The Trustees Of The University Of Pennsylvania Combination immuno therapy and radiotherapy for the treatment of Her-2-positive cancers
US8244698B2 (en) 2010-07-23 2012-08-14 Google Inc. Encoding a schema version in table names
JP5720531B2 (ja) * 2011-10-31 2015-05-20 富士通株式会社 ヘルプ作成支援装置、ヘルプ作成支援プログラムおよびヘルプ作成支援方法
CN104411327A (zh) 2012-03-12 2015-03-11 阿德瓦希斯公司 李斯特菌疫苗治疗以后的抑制细胞功能抑制
US20140310706A1 (en) * 2012-12-17 2014-10-16 Unisys Corporation Method for managing commodity computing
US9413596B2 (en) 2013-01-10 2016-08-09 Webroot Inc. Managed execution and expiration of agent commands
US9659040B1 (en) * 2013-09-23 2017-05-23 Amazon Technologies, Inc. Database fleet schema maintenance
US9471617B2 (en) 2013-10-29 2016-10-18 Sap Ag Schema evolution via transition information
US10114874B2 (en) * 2014-02-24 2018-10-30 Red Hat, Inc. Source query caching as fault prevention for federated queries
US20150248404A1 (en) * 2014-02-28 2015-09-03 Red Hat, Inc. Database schema migration
US9607037B2 (en) 2014-06-17 2017-03-28 International Business Machines Corporation Database schema upgrade as a service
US11275760B2 (en) * 2014-10-28 2022-03-15 Microsoft Technology Licensing, Llc Online schema and data transformations
US11176106B2 (en) * 2014-11-19 2021-11-16 Unisys Corporation Dynamic modification of database schema
US9535934B1 (en) 2015-11-17 2017-01-03 International Business Machines Corporation Schema lifecycle manager
US10621156B1 (en) * 2015-12-18 2020-04-14 Amazon Technologies, Inc. Application schemas for journal-based databases
KR102464235B1 (ko) * 2016-03-31 2022-11-04 엘에스일렉트릭(주) 이중화 ems 서버의 db 관리 방법
US10747743B2 (en) * 2016-06-30 2020-08-18 International Business Machines Corporation On-demand database catalog upgrade
CA2999581A1 (en) 2017-03-28 2018-09-28 Walmart Apollo, Llc Systems and methods for computer assisted database change documentation
US11055264B2 (en) * 2017-05-10 2021-07-06 Dropbox, Inc. Automatically coordinating application schema changes in a distributed data storage system
CN109189783B (zh) * 2018-08-03 2023-10-03 北京涛思数据科技有限公司 一种时序数据库表结构改变处理方法
CN111198711B (zh) * 2020-01-13 2023-02-28 陕西心像信息科技有限公司 基于MongoDB的Collection版本控制方法及系统
US12010244B2 (en) * 2020-11-09 2024-06-11 International Business Machines Corporation Blockchain based verifiability of user status
US11709808B1 (en) * 2022-03-25 2023-07-25 Snowflake Inc. Schema evolution for the serialization of non-primary key columnar data into row-organized byte sequences

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070261049A1 (en) * 2006-05-05 2007-11-08 Microsoft Corporation Techniques to perform gradual upgrades
US20070299858A1 (en) * 2006-06-21 2007-12-27 Oracle International Corporation Schema version management for database management
US20100145962A1 (en) * 2008-12-04 2010-06-10 General Electric Company Providing processing instructions for updating schema

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5787437A (en) * 1996-10-29 1998-07-28 Hewlett-Packard Company Method and apparatus for shared management information via a common repository
US5999947A (en) * 1997-05-27 1999-12-07 Arkona, Llc Distributing database differences corresponding to database change events made to a database table located on a server computer
SE521056C2 (sv) * 1997-07-21 2003-09-23 Ericsson Telefon Ab L M Metod för genomförande av schemaförändringar i en databas
US7287034B2 (en) * 2003-05-08 2007-10-23 Oracle International Corporation On-demand multi-version data dictionary to support distributed applications
US20050114404A1 (en) * 2003-11-21 2005-05-26 Bmc Software, Inc. Database table version upload
US7546322B2 (en) * 2005-03-09 2009-06-09 International Business Machines Corporation Generating unique name/version number pairs when names can be re-used
US20060294159A1 (en) * 2005-06-23 2006-12-28 International Business Machines Corporation Method and process for co-existing versions of standards in an abstract and physical data environment
US7739680B1 (en) 2005-07-21 2010-06-15 Sprint Communications Company L.P. Application server production software upgrading with high availability staging software
CN100511177C (zh) * 2006-11-06 2009-07-08 中兴通讯股份有限公司 一种嵌入式系统的符号定位方法
US9477462B2 (en) * 2008-01-16 2016-10-25 Oracle International Corporation System and method for software product versioning packaging, distribution, and patching
US9275085B2 (en) * 2008-05-05 2016-03-01 Hewlett Packard Enterprise Development Lp Data processing system and method
US8260876B2 (en) * 2009-04-03 2012-09-04 Google Inc. System and method for reducing startup cost of a software application
US8108612B2 (en) * 2009-05-15 2012-01-31 Microsoft Corporation Location updates for a distributed data store
US8244698B2 (en) 2010-07-23 2012-08-14 Google Inc. Encoding a schema version in table names

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070261049A1 (en) * 2006-05-05 2007-11-08 Microsoft Corporation Techniques to perform gradual upgrades
US20070299858A1 (en) * 2006-06-21 2007-12-27 Oracle International Corporation Schema version management for database management
US20100145962A1 (en) * 2008-12-04 2010-06-10 General Electric Company Providing processing instructions for updating schema

Also Published As

Publication number Publication date
CN103109290A (zh) 2013-05-15
KR20130054325A (ko) 2013-05-24
US20120023143A1 (en) 2012-01-26
CN103109290B (zh) 2016-12-28
US8244698B2 (en) 2012-08-14
EP2596442B1 (en) 2019-09-11
US20120023080A1 (en) 2012-01-26
EP2596442A1 (en) 2013-05-29
US10067956B2 (en) 2018-09-04
WO2012012551A1 (en) 2012-01-26
US8244699B2 (en) 2012-08-14
US20120296884A1 (en) 2012-11-22

Similar Documents

Publication Publication Date Title
KR101469393B1 (ko) 테이블 이름에 스키마 버전 인코딩
RU2673403C2 (ru) Способ доступа к веб-узлам, устройство и система веб-узла
US11106816B2 (en) Database public interface
US10713034B2 (en) Updating web resources
US10068028B1 (en) Deep link verification for native applications
EP2596425B1 (en) Membership tracking and data eviction in mobile middleware scenarios
US20170161511A1 (en) Database public interface
CN105283847A (zh) 本地存储数据版本控制
US20170324829A1 (en) Reduced page load time utilizing cache storage
CN104603777A (zh) 搜索结果中的外部动作建议
EP2989552A1 (en) Updating a front end client
JP5996812B2 (ja) ハイレベルオペレーティングシステム(hlos)ブートより前にスマートフォンに接続された周辺デバイスのためのデバイスドライバをプリフェッチするための方法および装置
US9378178B1 (en) Enhancing HTTP caching by allowing content sharing of data blocks across resources identified by different uniform resource locators
US8805901B1 (en) Geographically distributed file system
US20080301097A1 (en) LDAP revision history
US20140359046A1 (en) Preloading of shared objects
CN111367996A (zh) 基于kv索引的热数据增量同步方法及装置
CN113986921A (zh) 一种黑名单查询方法、系统、电子设备及存储介质
US11023830B2 (en) Processing a request in accordance with original rules and configurations
US20150106797A1 (en) Dynamic code selection based on data policies
CN113806595B (zh) 一种代码搜索系统生成方法、代码搜索方法和搜索服务器
CN118332018A (zh) 一种基于缓存预热的数据查询方法、装置、设备及介质
CN112765215A (zh) 数据查询方法、装置
KR101346034B1 (ko) 사무자동화 도구용 온라인 전문용어 사전 활용 시스템

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20171110

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20191113

Year of fee payment: 6