KR20050000328A - 쿼리 최적화기 시스템 및 방법 - Google Patents

쿼리 최적화기 시스템 및 방법 Download PDF

Info

Publication number
KR20050000328A
KR20050000328A KR1020040046467A KR20040046467A KR20050000328A KR 20050000328 A KR20050000328 A KR 20050000328A KR 1020040046467 A KR1020040046467 A KR 1020040046467A KR 20040046467 A KR20040046467 A KR 20040046467A KR 20050000328 A KR20050000328 A KR 20050000328A
Authority
KR
South Korea
Prior art keywords
query
intermediate language
representation
node
input query
Prior art date
Application number
KR1020040046467A
Other languages
English (en)
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 KR20050000328A publication Critical patent/KR20050000328A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/835Query processing
    • G06F16/8365Query optimisation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Machine Translation (AREA)

Abstract

최적화기/정규화기는 XML 입력 쿼리와 같은 입력 쿼리의 최적화된 중간 언어 표현을 생성하기 위해 사용된다. 중간 언어 형태로 입력 쿼리(query)를 최적화하는 방법은 입력 쿼리를 수신하고, 최적화에 영향을 받는 코드 패턴(code patten) 및 노드 유형을 식별하기 위해 좌측-깊이(left-depth) 우선 방식으로 노드를 검사하고, 입력 쿼리의 중간 언어 표현이 완전히 검사될 때까지 식별된 코드 패턴을 태깅(tagging)하고, 중간 언어 표현의 상부에서부터 태깅된 코드 패턴을 검색하고, 및 입력 쿼리를 위한 최적 표현을 만들기 위해 개선된 코드 패턴과 함께 태깅된 코드 패턴을 조정하는 것을 포함한다. 최적화기/정규화기로의 입력은 코드 패턴 및 각각의 노드 유형을 갖는 노드를 포함하는 중간 언어 표현으로 변환된 입력 쿼리라고 가정된다.

Description

쿼리 최적화기 시스템 및 방법{QUERY OPTIMIZER SYSTEM AND METHOD}
본 발명은 일반적으로 소프트웨어 쿼리(query)를 최적화하는 분야에 관한 것으로, 보다 구체적으로 XML 쿼리 언어 및 뷰(view) 정의 언어의 최적화에 관한 것이다.
언어 최적화는 모든 프로그래머의 목표이다. 효율적인 코드는 보다 빠르게 실행되고, 적은 컴퓨터 리소스(resource)들을 소비하고, 보다 크기가 작고 효율적이다. 이러한 속성들은 그들의 하드웨어 및 소프트웨어의 좋은 성능을 원하는 코드의 소비자들에게 매력적이다. 이런한 코드 최적화의 목표는 코드가 관계형 데이터베이스와 같은 큰 데이터베이스를 통해 쿼리하기 위해 사용될 수 있는 쿼리 언어 어플리케이션들을 포함하는 대부분의 어플리케이션(application)들에게 바람직하다. 문제점은 쿼리를 실행하는 시스템이 다수의 언어들을 사용하는 다수의 데이터베이스를 통해 쿼리하는 태스크(task)를 취할 때 보다 심각해진다. 이 시나리오에서, 효율적으로 코드를 생성하는 것은 최적화되지 않은(non-optimized) 코드 보다 빠르고 일관성있게 쿼리 결과들을 리턴(return)하므로써 쿼리하는데 이익을 준다. 최적화가 필요한 한가지 예는 XSLT, XQuery 및 XPath 등의 XML 관련 언어 쿼리, 또는 뷰 정의 언어가 SQL 데이터베이스를 통해 쿼리들을 실행하는 시스템으로 입력될 수 있는 시스템 내에 있다. 이런 시스템에서, 최적화기의 역할은 실행 코드의 효율을 개선하는 것이다.
XML 쿼리는 정규화 및 최적화에 대한 적어도 4개의 장벽(barrier) 노드, 식별, 순서화, 부작용 및 구조성(construction)을 갖는다. 데이터베이스 및펑션(function) 프로그래밍 최적화의 공통 기술은 대입을 수행하므로써 변수를 제거하는 것이다. 그러나, 대입을 수행할 때 단순한 대입이 잘 수행되지 않을 수 있을 때조차 큰 주의가 필요하다.
한 문제점은 많은 XML 쿼리 언어들이 명시적으로 또는 암시적으로 노드 식별에 의존한다는 것이다. 예를 들어, XQuery를 고려해보자.
let $a := <foo/>
return $a is $a
이 XQuery는 단일 XML 요소를 구성한 후, 그것이 자신과 동일한 식별을 갖는지를 테스트한다. 이 쿼리는 참을 리턴해야한다. 이것을 대입(즉, $a의 모든 인스턴스(instance)를 자신의 값으로 대입시킴)로부터 생기는 쿼리와 대조하라.:
<foo/>is<foo/>
이 쿼리는 서로 상이하면 쿼리가 거짓을 리턴하는 두개의 요소를 구성한다. 문제점은 문서 순서에 따라 암시적으로 정렬하거나 식별을 사용해 중복 노드들을 제거하는 연산자와 함께 표명될 수 있다.
정규화 및 최적화의 다른 문제점은 XML이 순서화된다는 것이다. 이러한 순서화는 문서 인스턴스들에 걸쳐 안정된 것이 바람직하다. 다음의 코드 모션(code-motion) 기술의 예를 고려해보자. 이 예는 연산식들을 루프(loop)에 푸시(push)하거나, 그들이 루프에 독립적일때 루프로부터 풀(pull)된다. 주어진 쿼리:
for $i in $e1
where $condition1
return
for $j in $e2
where $condition2
return $k
전형적인 다시 쓰기의 결과는 다음과 같을 수 있다.:
for $i in $e1
for $j in $e2
where $condition1
and $condition2
return $k
이러한 다시 쓰기의 효과는 순서와 및 결과의 위치에 불리하다. 비록 이러한 다시 쓰기는 언뜻 보기에 맞는 것처럼 보이지만, 내부 조건이 다시 쓰기가 변경한 루프 내의 위치를 참조할 수 있다. 연산식이 상이한 순서를 갖도록 하는 임의의 최적화는 위치가 보호될 필요 없을 때만 적용되어야 한다. 그렇지 않으면, 잘못된 다시 쓰기가 야기된다.
언어 최적화를 프로그래밍하는 공통 기술은 임시적인 연산식의 결과가 필요하지 않을 때 그 임시적인 연산식을 제거하는 것이다. 그러나, 임시적인 XML 쿼리 언어 연산식을 제거하더라도 부작용에서 완전히 해방될 수는 없다. 몇몇의 연산식들은 평가(evaluation)를 XQuery의 에러 펑션(error())과 같은 에러로 끝낸다. 기타의 것들은 XSLT의 <xsl:message/> 연산자와 같은 메시지를 출력한다. 몇몇 임시적인 연산식들은 쿼리 언어 의미들이 허용할 때만 제거될 수 있다. 두개의 예처럼, XQuery의 에러펑션 및 거짓펑션(error() 및 false()), 및 XSLT 경로 연산식를 고려해보자.
document('malformed.xml')//foo[false()]
비록 최적화기가 항상 일어나는 거짓펑션(false()) 조건때문에 두 연산식 모두들 제거하려고 하지만, 이러한 언어들의 엄격한 구현은 두가지 에러가 모두 보고되길 요구할 수 있다. 다행히, XQuery는 그것의 피연산자들 중 하나가 에러를 야기할 때 단락을 위해 AND 연산자를 허용한다. XSLT는 이런 에러를 프로세스하려고 시도할 때, 문서펑션(document())이 빈 리스트를 리턴하는 것을 허용한다. 그러므로, 두 연산식 모두는 컴파일 시간에 빈 리스트로 최적화될 수 있다. 다음과 같은 XQuery 연산식을 고려해보자:
(<x dupe="1" dupe="2">can you get here?</x>)//text()
이 예에서, 최적화기는 무효한 임시적인 요소를 제거하고 텍스트 노드만을 리턴하길 원할 수 있다. 만약 이런 쿼리들이 최적화되지 않으면, 그들은 실행시간에 에러를 만들것이다. 그러나 최적화됐을 때는 에러를 만들지 않을 것이다. 상업적인 구현에서, 기타 프로그래밍 언어들과의 상호 운용성이 최선일 수 있다. 그러나, 다른 프로그래밍 언어로 쓰인 펑션을 호출하는 것은 최적화에 장벽이 될 수 있는 부작용을 포함할 가능성이 있는 모르는 효과들을 야기시킬 수 있다.
다른 문제점은 XML의 장애 구조가 원하지 않는 부작용들을 가질 수 있다는것이다. XML 구조는 정상적으로 자신의 내용들을 복사하는 것을 포함하고 노드 식별을 변환하는 것은 다시쓰기 및 실행을 통해 보호되어야 한다. XQuery를 고려에 보자:
foo((<x><y/></x>)//y)
이 쿼리는 연산식 쿼리를 단지 <y/>요소인 (<x><y/></x>)//y의 결과를 foo()에 전달하므로써 펑션 foo()를 인보크(invoke)시킨다. 최적화기는 명백히 불필요한 XML 구조 및 네비게이션(navigation)을 제거하고 선택된 </y>요소만을 전달하려고 한다. 그러나, 만약 foo()가 부모 노드에 액세스(access)하려고 시도하고 이 펑션을 정의하면:
foo($y){$y/..}
그리고 만약 최적화기가 <x>를 제거하면, 이 쿼리는 잘못된 결과를 생성할 것이다. 외부 펑션들에 전달되는 구조된 XML이 구조 문제점을 피하기 위해 완전히 보호되는 것이 바람직하게 보인다. 유사한 문제점들은 임시적인 XML 연산식 내에 나타날 수 있는 아래와 같은 영역 내의 명칭 공간선언
(<x:x xmlns:x="x"><y/></x>)//y
및 기타 메타 데이터 명령을 야기한다.
XSLT와 같은 언어에서, 구조 부작용들은 언어가 구조적이지 않기때문에 신경이 덜 쓰인다. 그러나 이런 구조 쟁점들은 XQuery와 유사한 언어를 최적화할 때 또는 XML 쿼리들이 구조된 XML 뷰들을 통해 수행될 때 현저하게 영향을 준다.
그러므로 XML 최적화기가 잘못된 대입을 피하고, 순서가 최적화된 XML 연산식에서 중요할 때 다시 쓴 연산식들의 순서를 바꾸는 다시쓰기를 피하고, 임시적인 연산식 제거 및 다양한 언어 사용으로부터의 부작용들을 피하고, 구성 문제점들을 피하는 것이 바람직하다. 본 발명은 상술된 필요들을 제거하고, 다양한 시스템들, 방법들, 및 기술들을 사용해 그들을 해결하고, 쿼리를 최적화하기 위한 기타 잇점들을 제공하기도 한다.
본 발명은 최적화기/정규화기, 및 XML 입력 쿼리와 같은 입력 쿼리의 최적화된 중간 언어 표현을 생성하는 기술들에 관한 것이다. 본 발명은 단독 최적화기로 또는 예를 들어, XML 쿼리 실행시간 시스템을 포함하는 보다 큰 시스템의 일부로 이용될 수 있다.
본 발명은 입력 쿼리를 수신하므로써 입력 쿼리에 대한 최적 표현을 구조하고, 최적화에 영향을 받는 코드 패턴 및 노드 유형을 식별하기 위해 좌측-깊이(left-depth) 우선 방식으로 노드를 검사하고, 입력 쿼리의 중간 언어 표현이 완전히 검사될 때까지 코드패턴을 태깅(tagging)하고, 중간 언어 표현의 상부에서부터 태깅된 코드 패턴을 검색하고, 입력 쿼리를 위한 최적 표현을 만들기 위해 개선된 코드 패턴들과 함게 태깅된 코드 패턴들을 조정하기 위한 제 1의 예시적인 방법을 포함한다. 최적화기/정규화기로의 입력은 코드 패턴들 및 각각의 노드 유형을 갖은 노드들을 포함하는 중간 언어 표현으로 변환된 입력 쿼리라고 가정된다.
입력 쿼리에 대한 최적 표현을 구조하는 제 2의 예시적인 방법은 입력 쿼리를 수신하고, 각각의 노드 유형들에 관한 코드 패턴들을 검사하기 위해 노드를 검사하고, 최적화되지 않은(non-optimized) 코드 패턴들을 탐지하기 위해 패턴 매치 알고리즘을 사용하여 검사된 코드 패턴들을 비교하고, 입력 쿼리를 위한 최적 표현을 만들기 위해 하나 이상의 최적화되지 않은 코드 패턴들 및 검사된 코드 패턴들을 개선된 코드 패턴과 함께 조정하는 것을 포함한다. 다시 한번, 입력 쿼리는 각각의 노드 유형을 갖는 노드를 포함하는 중간 언어 표현이다.
본 발명은 XML 지향 실행시간 쿼리 프로세싱 방법론을 포함하는 예시적인 시스템으로 구현될 수 있다. 이 방법론은 다수의 MXL 쿼리들을 취하고, 그들을 중간 언어 표현으로 번역하고, 최적화를 수행하고, 및 그후 데이터 소스 포멧(format)과 호환될 수 있는 형태로 쿼리들을 컴파일하는 것을 포함한다.
도 1은 본 발명의 양상들이 구현될 수 있는 예시적인 컴퓨팅 환경을 나타내는 블럭도.
도 2는 본 발명의 양상들이 구현될 수 있는 예시적인 블럭도 아키텍쳐(architecture)를 설명.
도 3은 본 발명의 최적화 방법의 실시예를 설명하는 순서도를 도시.
도 4는 본 발명의 최적화 방법의 대안적인 실시예를 설명하는 순서도를 도시.
도 5는 본 발명의 실시예에 대응하는 중간 언어 최적화 예를 도시.
도 6은 본 발명의 실시예에 대응하는 중간 언어 예의 낱낱의 최적화를 도시.
*도면의 주요 부분에 대한 부호의 설명*
210a: XML 언어 컴파일러
220: 최적화기/정규화기
230a: 타겟 생성기
240a: 실행 엔진
바람직한 실시예들에 대한 후술된 상세한 기재뿐만 아니라 전술된 발명이 이루고자 하는 기술적 과제는 첨부된 도면들과 함께 읽혔을 때 더 잘 이해된다. 본 발명을 도시하기 위해, 도면들 내에 본발명의 예시적인 구조들을 나타냈다. 그러나, 본 발명이 나타낸 특정한 방법들 및 매개들에 한정된 것은 아니다.
최적화기/정규화기 개요
예시적인 쿼리 최적화기/정규화기는 중복되는 형태들을 제거하고 쿼리 실행 속도를 개선시키므로써 쿼리 효율을 개선한다. 예시적인 정규화기 펑션은 중복되는 형태들을 제거하여, 프로세스하기 위해 백 엔드(back end) 컴파일러가 준비되어야하는 쿼리 종류의 수를 줄이므로써 백 엔드 컴파일러 구현을 단순화시킨다. 이로인해 보다 나은 시스템 성능이 달성된다. 최적화기/정규화기는 단독 구성요소로또는 큰 시스템의 부분으로 사용되도록 설계될 수 있다.
최적화 내의 잘못된 대입의 문제점은 대입 또는 노드 식별 면에서 부정확한 기타 다시쓰기를 실행하지 않음으로써 피해질 수 있다. 이것은 입력으로 쿼리의 노드 지향 중간 언어 표현을 사용하므로써 수행된다. 그러므로 노드 특성은 최적화 프로세스의 부분으로 분석될 수 있다. 입력 쿼리의 중간 언어 표현의 일부의 다시쓰기는 재순서화가 중간 표현 내의 임의의 하부 연산식들에 영향을 주지 않을때만 올바르게 수행된다. 연산식의 순서는 입력 쿼리의 명백한 중간 언어 표현을 사용해 순서에 민감한 연산식들을 명확하게 식별하므로써 바람직하게 영향받지 않는다. 종합적으로, 최적화 에러들 및 관련 문제점들은 최적화 장벽들, 명확한 연산자들, 및 잘 인증된 다시쓰기 규칙들에 대한 신중한 주의의 조합을 통해 피해질 수 있다.
본 발명은 컴퓨터 시스템의 하드웨어 요소들 및 소프트웨어 요소들의 하나 이상의 세트 내에 구현될 수 있다. 본 발명이 포함될 수 있는 예시적인 컴퓨터 시스템이 후술된다.
예시적인 컴퓨팅 장치
도 1 및 후술은 본 발명이 구현될 수 있는 적절한 컴퓨팅 환경의 요약적이고 일반적인 기재를 제공한다. 그러나 모든 종류의 핸드헬드(handheld), 휴대용 및 기타 컴퓨팅 장치들 및 컴퓨팅 오브젝트들이 본 발명과 결합하여 사용될 수 있다. 그러므로, 범용 컴퓨터가 후술되지만, 이것은 한 예이고, 본 발명은 네트워크/버스 상호운용성 및 상호작용을 갖는 클라이언트와 같은 기타 컴퓨팅 장치로 구현될 수있다. 그러므로, 본 발명은 매우 작거나 최소의 클라이언트 리소스들을 포함하는 네트워크 호스트 서비스의 환경, 예를 들어, 클라이언트 장치들이 단지 가전제품, 또는 기타 컴퓨팅 장치들 및 오브젝트들 내에 위치한 오브젝트들과 같은 네트워크/버스의 인터페이스로서 서비스하는 네트워크 환경 내에 구현될 수 있다. 본질적으로, 데이터가 저장될 수 있거나 데이터가 검색될 수 있는 곳은 본 발명에 따르는 작동을 위한 환경으로서 바람직하고, 또는 적절하다.
비록 요구되지는 않지만, 본 발명은 장치 또는 오브젝트를 위한 서비스의 개발자에 의해 사용되기 위해 운영 시스템을 통해 구현되고 및/또는 본 발명에 따라 작동하는 어플리케이션 소프트웨어 내에 포함될 수 있다. 소프트웨어는 클라이언트, 워크스테이션(workstation), 서버 또는 기타 장치들 중의 하나 이상의 컴퓨터들에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령들의 일반적인 문맥으로 기재될 수 있다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조 등을 포함한다. 전형적으로, 프로그램 모듈의 기능은 다양한 실시예들에서 원하는대로 조합되거나 분산될 수 있다. 게다가, 본 기술에 숙련된 사람들은 본 발명이 기타 컴퓨터 구성들과 함께 구현될 수 있음을 인식할 것이다. 본 발명과 함께 사용되기에 적절할 수 있는 기타 잘 알려진 컴퓨팅 시스템, 환경, 및/또는 구성들은 개인용 컴퓨터(PC), 현금 자동 입출금기, 서버 컴퓨터, 핸드헬드 또는 랩탑(laptop) 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 프로그램가능 가전제품, 네트워크 PC, 가전제품, 라이트(light), 환경 제어 요소, 미니컴퓨터, 메인프레임 컴퓨터 등을 포함하지만 이에 한정된 것은 아니다. 본 발명은 또한 태스크가 통신 네트워크/버스 또는 기타 데이터 전송 매체를 통해 링크된 원격 프로세싱 장치들에 의해 수행되는 분산형 컴퓨팅 환경 내에서도 구현될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 장치를 포함하는 로컬 및 원격 컴퓨터 저장 매체 양자에 위치할 수 있고, 클라이언트 노드들은 다음 차례에 서버 노드로 행동할 수 있다.
도 1은 본 발명이 구현될 수 있는 적절한 컴퓨팅 시스템 환경(100)의 예를 나타낸다. 비록 명확하게 상술됐지만, 컴퓨팅 시스템 환경(100)은 단지 적절한 컴퓨팅 환경의 일 예이며 본 발명의 사용 또는 기능의 영역에 어떤 제한을 주기 위한 것은 아니다. 컴퓨팅 환경(100)은 예시적인 운영 환경(100)에 도시된 구성요소 중의 임의의 하나 또는 조합에 관하여 임의의 종속성 또는 요구사항을 갖는 것으로 해석되서는 안된다.
도 1을 참조하면, 본 발명을 구현하기 위한 예시적인 시스템은 컴퓨터(100)의 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터 시스템(110)의 구성요소들로는, 프로세싱 유닛(120), 시스템 메모리(130), 및 시스템 메모리를 포함하는 다양한 시스템 구성요소를 프로세싱 유닛(120)에 연결시키는 시스템 버스(121)가 포함될 수 있지만, 이에 한정된 것은 아니다. 시스템 버스(121)는 다양한 버스 아키텍처 중의 임의의 것을 사용하는 로컬 버스, 주변 버스, 및 메모리 버스 또는 메모리 제어기를 포함하는 몇가지 유형의 버스 구조 중의 임의의 것일 수 있다. 예를 들어, 이러한 아키텍처는 산업 표준 아키텍처(ISA) 버스, 마이크로 채널 아키텍처(MCA)버스, 강화 ISA(EISA) 버스, 비디오 전자 표준 어소시에이션(VESA) 로컬 버스, 및 (메자닌(Mezzanine) 버스로도 알려진) 주변 구성요소 상호접속(PCI) 버스를 포함하지만, 이에 한정된 것은 아니다.
컴퓨터(110)는 통상적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 판독가능 매체는 컴퓨터 시스템(110)에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수 있으며, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 둘다 포함한다. 예를 들어, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있지만, 이에 한정된 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 둘다 포함한다. 컴퓨터 저장 매체는 램(RAM), 롬(ROM), 전기 소거 가능 롬(EEPROM), 플래쉬 메모리 또는 기타 메모리 기술, 다시쓸 수 있는 콤팩트 디스크(CDRW), 씨디롬(CD-ROM), DVD(digital versatile disk) 또는 기타 광학 디스크 저장장치, 자기 카세트, 자기 테이프, 자기 디스크 저장장치 또는 기타 자기 저장장치, 또는 컴퓨터(110)에 의해 액세스될 수 있고 원하는 정보를 저장하는 데 사용될 수 있는 임의의 기타 매체를 포함할 수 있지만, 이에 한정되지 않는다. 통신 매체는 통상적으로 반송파 또는 기타 전송 메커니즘 등의 변조된 데이터 신호에 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈, 또는 다른 데이터를 구현하며, 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"라는 용어는 신호 내에 정보를 인코딩(encoding)하도록 설정되거나 변환된 특성을 하나이상 갖는 신호를의미한다. 예를 들어, 통신 매체는 유선 네트워크 또는 직접 유선 접속 등의 유선 매체와, 음향, RF, 적외선 및 기타 무선 매체 등의 무선 매체를 포함하지만, 이에 한정된 것은 아니다. 상술한 것들 중의 임의의 조합이 컴퓨터 판독가능 매체의 법위 내에 포함되어야 한다.
시스템 메모리(130)는 롬(131) 및 램(132) 등의 휘발성 및/또는 비휘발성 메모리의 형태의 컴퓨터 저장 매체를 포함한다. 시동중과 같은 때에 컴퓨터 시스템(110) 내의 요소들 간에 정보를 전송하는 것을 돕는 기본 루틴을 포함하는 기본 입출력 시스템(BIOS; 133)은 일반적으로 롬(131)에 저장된다. 램(132)은 일반적으로 프로세싱 유닛(120)에 즉시 액세스될 수 있고 및/또는 프로세싱 유닛(120)에 의해 현재 작동되는 프로그램 모듈 및/또는 데이터를 포함한다. 예를 들어, 도 1은 운영 시스템(134), 어플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)를 도시하지만, 이에 한정된 것은 아니다.
컴퓨터 시스템(110)은 또한 기타 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수도 있다. 단지 예로서, 도 1은 비분리형 비휘발성 자기 매체로부터 판독하거나 그 자기 매체에 기록하는 하드 디스크 드라이브(141), 분리형 비휘발성 자기 디스크(152)로부터 판독하거나 그 자기 디스크에 기록하는 자기 디스크 드라이브(151), 및 CD ROM, CDRW, DVD, 또는 기타 광학 매체 등의 분리형 비휘발성 광학 디스크(156)로부터 판독하거나 그 광학 디스크에 기록하는 광학 디스크 드라이브(155)가 도시되어 있다. 예시적인 운영 환경에서 사용될 수 있는 다른 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래쉬 메모리 카드, DVD, 디지털 비디오 테이프, 반도체 램, 반도체 롬 등을 포함하지만 이에 한정된 것은 아니다. 하드 디스크 드라이브(141)는 일반적으로 인터페이스(140)와 같은 비분리형 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광학 디스크 드라이브(155)는 일반적으로 인터페이스(150)와 같은 분리형 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
앞서 기술되고 도 1에 도시된 드라이브 및 그 관련 컴퓨터 저장 매체는 컴퓨터(110)를 위한 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 및 기타 데이터의 저장을 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 시스템(144), 어플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장하는 것으로 도시된다. 이들 구성요소는 운영 시스템(134), 어플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일할 수도 있고 다를 수도 있다. 운영 시스템(144), 어플리케이션 프로그램(145), 다른 프로그램 모듈(146), 및 프로그램 데이터(147)는 최소한 다른 복사본(different copies)임을 나타내기 위하여 다른 번호를 부여하였다. 사용자는 일반적으로 마우스(mouse), 트랙볼(trackball), 또는 터치 패드(touch pad)라 불리우는 포인팅(pointing) 장치(161) 및 키보드(162)와 같은 입력 장치를 통해 컴퓨터(110)에 코맨드(command) 및 정보를 입력할 수 있다. (도시되지 않은) 기타 입력 장치는 마이크로폰(microphone), 조이스틱(joystick), 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이들 입력 장치 및 그외의 입력 장치는 시스템 버스(121)에 연결된 사용자 입력 인터페이스(160)를 통해 종종 프로세싱 유닛(120)에 접속되지만, 병렬 포트, 게임 포트 또는 유니버설 시리얼 포트(USB) 와 같은 기타 인터페이스 및 버스 구조에 의해 접속될 수 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치는 또한 다음 차례에 비디오 메모리(도시되지 않음)와 통신할 수 있는 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속된다. 모니터(190)외에도, 컴퓨터 시스템은 또한 출력 주변 인터페이스(195)를 통해 접속될 수 있는 스피커(197) 및 프린터(196) 등의 기타 주변 출력 장치를 포함할 수 있다.
컴퓨터 시스템(110)은 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 이용한 네트워크 또는 분산형 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 개인용 컴퓨터, 서버, 라우터, 네트워크 PC, 피어(peer) 장치, 또는 기타 공통 네트워크 노드일 수 있으며, 비록 도 1 에는 메모리 저장 장치(181)만이 도시되어 있지만, 컴퓨터 시스템(110)에 관하여 상술한 요소 중 다수 또는 모든 구성요소를 일반적으로 포함할 수 있다. 도시된 논리적 접속은 근거리 통신망(LAN; 171) 및 원거리 통신망(WAN; 173)을 포함하지만, 그 외의 네트워크/버스를 포함할 수도 있다. 이러한 네트워크 환경은 가정, 사무실, 기업 광역 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워크 환경에서 사용되는 경우, 컴퓨터 시스템(110)은 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워크 환경에서 사용되는 경우, 컴퓨터 시스템(110)은 일반적으로 인터넷 등의 WAN(173)을 통해 통신을 구축하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘(mechanism)을 통해 시스템 버스(121)에 접속될 수 있다. 네트워크 환경에서, 컴퓨터 시스템(110)에 관하여 도시된 프로그램 모듈 또는 그 일부분은 원격 메모리 저장 장치에 저장될 수 있다. 예로서 (한정하고자 하는 것은 아님), 도 1은 메모리 장치(181)에 상주하는 원격 어플리케이션 프로그램(185)을 도시한다. 도시된 네트워크 접속은 예시적인 것이며, 컴퓨터들간의 통신 링크를 구축하는 그 외의 수단이 사용될 수 있다.
다양한 분산형 컴퓨팅 네트워크는 개인용 컴퓨팅 및 인터넷을 중심으로 개발되어 왔으며 개발 중에 있다. 개인 및 비즈니스 사용자를 막론하고, 컴퓨팅 활동을 점점 웹 브라우저 지향적 또는 네트워크 지향적으로 만드는 어플리케이션 및 컴퓨팅 장치에 대하여 이음새없이 상호 동작이 가능하고 웹 사용가능한 인터페이스(seamlessly interoperable and web-enabled interface)가 제공된다.
예를 들어, 워싱턴 98052, 레드몬드, 일 마이크로 길, 마이크로소프트사가 개발한 MICROSOFT의 .NET 플랫폼은 서버, 웹-기반 데이터 저장과 같은 빌딩-블럭(building-block) 서비스, 및 다운로드 가능한 장치 소프트웨어를 포함한다. 예시적인 실시예는 컴퓨팅 장치 상에 상주하는 소프트웨어와 관련하여 기재되지만, 본 발명의 하나 이상의 부분은, 본 발명에 따르는 작동이 모든 .NET의 언어 및 서비스에 의해 수행될 수 있거나, 지원될 수 있거나, 이를 통해 액세스될 수 있도록, 모든 운영 시스템, 어플리케이션 프로그래밍 인터페이스(API), 또는 코프로세서(coprocessor), 디스플레이(display) 장치, 및 요구 오브젝트 중 임의의 것 간의 "미들 맨(middle man)" 오브젝트를 통해 구현될 수 있을 뿐 아니라, 기타 분산형 컴퓨팅 프레임워크에서 구현될 수도 있다.
최적화 설명 및 본 발명의 예시적인 실시예
XML 쿼리들의 비효율의 두가지 주요원은 버퍼링(buffering) 및 유형 변환이다. 연산자가 스트리밍될 수 없을때 버퍼링이 야기되고, 대신에 몇몇의 데이터가 메모리에 캐쉬(catch)되고 연산자를 평가하기 위해 한번 이상 횡단된다. 이러한 것이 야기될 때, 파이프라인(pipeline) 프로세싱은 정지될 수 있고 메모리 할당 및 다중 전달이 야기될 수 있다. 데이터를 두번 연산하는 쿼리들이 데이터를 한번만 연산하는 쿼리들로 바뀌는 것이 바람직한 최적화이다.
버퍼링은 대부분 쿼리가 구현되는 방법에 대단히 관련된 물리적인 쿼리 플랜의 한 양상이다. 그러나, 논리적 쿼리 플랜 내에는 탐지되고 다시쓰기될 수 있는 패턴이 있다. 예를 들어, 쿼리 sum($x)div count($x)는 avg($x)와 같을 수 있다. 두번째 연산식이 단일 전달 내에 값을 계산할 수 있는 반면, 첫번째 연산식은 $x를 두번 평가하는 것을 요구한다.
XML에서, 유형 변환은 일반적으로 스트링(string) 표현에서 기계 유형(정수와 유사)으로 변환되는 것을 포함하며 그 반대도 포함한다. 관계형 데이터베이스는 인습적으로 이런 쿼리들을 잘 최적화하지 않는다. 왜냐하면 그들이 데이터가 이미 기계 유형으로 저장된 관계형 도메인(domain) 내에서 비교적 일반적이지 않기 때문이다. XML 쿼리의 구현에서, 특히 관계형 데이터에서, 일반적인 XML 데이터에서 조차, 가능한 많은 유형 변환 및 유형 테스트들이 제거되는 것이 바람직하다고 고려될 수 있다.
예를 들어, 쿼리 Customer[@CustomerID='ALFKI']는 암시적으로 CustomerID 노드를 스트링으로 변환하는 것을 요구할 수 있다. 만약 이 노드의 유형이 이미 XS:스트링으로 되어있으면, 비록 노드의 스트링 값이 여전히 검색될 수 있지만, 변환이 요구되지 않는다. 만약 노드가 nvarchar와 같은 SQL 유형을 갖는 행에 매핑(mapping)되면, 관계형 데이터에서 XML 데이터로의 변환도 필요하지 않다. 이러한 두가지 유형의 변환을 제거하는 것은 CustomerID가 색인됐다고 가정하고 색인 스캔에서 색인 탐색으로 바뀌는 SQL 쿼리 플랜(plan)을 야기시킨다. 이러한 플랜은 10x까지 성능 개선할 수 있다.
이런 최적화들은 일반적으로 사실상 물리적이다. 비록 불필요한 SQL/XML 변환이 제거될 수 있지만, 논리적인 쿼리 플랜 내에 이미 가능한 몇몇의 최적화가 있다. 한 접근방법은 최적화 프로세스동안 유형들을 재련(refining)하므로써 유형 변환 및 유형 테스트를 제거할 수 있다. 더 많은 정적 유형 정보가 쿼리에 대해 정확히 알려지고 이해될수록, 보다 많은 연산자들이 정적으로 제거될 수 있다.
본 발명의 실시예는 쿼리 내의 평션 연산을 정의하는 노드를 구성하는 그래프 구조를 갖는 중간 언어 표현을 사용한다. 이 중간 언어는 쿼리 중간 언어이고 QIL로 불린다. 예시적인 쿼리 중간 언어 정의는 워싱톤 레드몬드의 마이크로소프트 코퍼레이션에 양도된 쿼리 중간 언어 방법 및 시스템이란 명칭의 동시 제출된 특허 출원(이것과 같은 날에 청구된 시리얼 번호 XX/XXX,XXX.) 내에 제공된다. 동시 제출된 출원의 내용은 참조하므로써 이 출원에 완전히 통합된다고 고려된다.
패턴 검출은 정규화 및 최적화의 후보들을 식별하기 위해 사용된다. 이런 중간 언어에 의해 개발된 패턴들은 복잡도를 갖지 않는다. 일반적으로, 패턴들은 대부분 피상적인 패턴들이고 특정 노드 유형에서 루트(root)되고 모든 백에지(back-edge)들은 알려진 위치 내에서 야기되도록 강요당한다. 결론적으로, 패턴 매치 알고리즘은 용이하게 이런 표현들을 수용할 수 있다.
QIL이라고 불리는 XML 중간 언어는 XML 쿼리 및 뷰의 표현이다. 쿼리 중간 언어는 XML 쿼리의 의미의 명시적 표현이다. 쿼리 중간 언어는 모든 XML 쿼리 및 뷰 언어 컴파일러에 걸쳐서 일반적인 의미 표현으로 뷰될 수 있다. QIL은 일반적인 추상 구문 트리(AST)와 유사하지만, QIL이 언어의 구문을 캡쳐하는 대신 쿼리의 의미, 또는 뜻을 캡쳐한다는 면에서 다르다. 다른 차이는 QIL이 AST처럼 트리 구조가 아니라 그래프 구조란 것이다.
QIL은 다양하고 상이한 타겟(target) 데이터 소스(관계형 및 비관계형 데이터 등)를 통해 다수의 상이한 XML 쿼리 언어 및 뷰 정의 언어(XPath, XSLT, 및 XQuery 등)를 추상화할 수 있다. 이렇게, QIL은 공통 구조가 모든 호환성있는 XML 언어들을 지원하도록 할 수 있다. 모든 연산은 명백하고 명확하다.
QIL에 의해 생성되고 최적화기에 의해 검출되는 패턴은 루트 노드 유형에 의해 그룹화되고 패턴 식별 및 최적화 구현을 위한 하부클래스(subclass)를 생성하기 위해 사용된다. 이러한 하부클래스들은 다음 차례에 각각의 패턴을 주어진 노트 유형에 매치시키기 위해 QIL 그래프 상에서 좌측-깊이(left-depth) 우선(예를 들어, 아래서 위로(bottom-up)) 전달을 수행한다. 만약 패턴이 매치되지 않으면, 그것은 노드(및 이미 방문된 그것의 전체 하부그래프)를 복사하거나, 표시된 최적화 대체(replacement)를 수행한다.
이 접근방법은 g가 문법 내의 패턴의 수이고 n이 그래프 내의 노드의 수인 곳에서 최악의 복잡도를 갖는다. 비록 구현에서 패턴들이 단지 단일 레벨 깊이라서 그것의 평균 시간이 보다 정밀하게 약이더라도, 최적화기는 각각의 패턴들을 매치시키기 위해 각각의 노드 및 모든 자손(descendant)들을 뷰한다.
도 2는 본 발명의 양상을 구현하는 예시적인 시스템 아키텍처(architecture)의 블럭도를 나타낸다. 중간 언어 컴파일러 및 타겟 실행 엔진을 포함하는 쿼리 실행시간 아키텍처(200)를 나타낸다. 이 아키텍처는 다수의 데이터 소스 상에서 XML 쿼리들을 위해 데이터를 수신, 컴파일, 번역, 및 액세스하도록 구현된 예시적인 기본 블럭들을 나타낸다. 다수의 프론트 엔드(front end) 언어 컴파일러(210)들은 XML 또는 XML 관련 표준에 적합하도록 현실화될 수 있다. 본래의 또는 입력 쿼리는 도 1에 나타난 것과 같은 다수의 입력 장치들 중 임의의 하나로부터 수신되거나 입력될 수 있다.
도 2에서, 프론트 엔드 컴파일러(210)는 입력 장치(도 2에 도시되지 않음)를 통해 XML 쿼리, XML 뷰, 또는 기타 관련된 XML 언어 인쿼리(inquiry)를 수신할 수 있고 입력 쿼리들의 합성을 의미하는 컴파일된 XML 중간 언어 표현(215)을 생성할수 있다. 프론트 엔드컴파일러(210)를 위한 전형적인 언어 유형은 월드 와이드 웹 컨소시엄(world wide web consortium; W3C?)이 공개한 XPath, XML 스타일시트 언어(XSL), XSLT 및 XML 쿼리 언어(XQuery)의 표준을 포함한다. XML 뷰 컴파일러가 또한 제공될 수 있으며, 여럿가운데서 특히 XQuery의 W3C?XML 표준 뷰를 포함할 수 있다. 쿼리 및 뷰 언어 및 다수의 타겟 모델들 간의 중간 언어 추상화는 비주얼 XML 데이터뿐만 아니라 마이크로소프트닷넷(Microsoft?.NET™)으로부터와 같은 현실적인 XML 데이터가 데이터 소스로 사용되는 것을 허용한다.
XML 중간 언어 표현(215)은 쿼리 최적화기/정규화기(220)로 입력된다. 최적화기의 펑션은 쿼리 성능을 개선시키고 입력 중간 언어 표현 내의 중복된 형태를 제거한다. 최적화기는 최적화된 XML 쿼리 표현을 백 엔드(back end) 타겟 생성기(230)로 전달하기 전에 XML 중간 언어 표현의 크기를 줄이고 복잡도를 낮추는 다수의 알고리즘을 구현하므로써 시스템 성능을 높이는 서비스를 한다.
관련된 타겟 쿼리 언어 실행 엔진(240)의 다중성을 지원하기 위한 다수의 백 엔드 타겟 생성기(230)가 있을 수 있다. 각각의 백 엔드 타겟 생성기(230)는 각각 지원된 데이터 리소스 내의 데이터의 모델에 적합한 데이터 소스 상에서 효과적으로 작업하도록 구성될 수 있다. 예를 들어, SQL 데이터베이스 소스를 위한 타겟 쿼리 언어 생성기가 SQL 데이터베이스 관리 시스템을 갖는 관계형 데이터베이스를 통해 쿼리할 때 효율성을 위해 최적화될 수 있다. 그러므로, 예를 들어, 타겟 언어 생성기(230a)는 중간 언어 표현(215)을 특정 데이터 소스(250)와 호환될 수 있는 타겟 기계 언어로 변환시키기 위해 실행 엔진(240a)과 짝을 이룰 수 있다. 선택적으로, 타겟 생성기는 실행 엔진이 하나 이상의 데이터 리소스(250)를 직접 쿼리할 수 있도록 하기 위해 XML 중간 언어 표현(215)을, 예를 들어, 마이크로소프트 중간 언어(MSIL)와 같은 다른 중간 언어로 변환시킬 수도 있다.
컴파일된 쿼리를 실행할 때, 실행 엔진은 보통, 예를 들어, 또다른 프로세싱, 저장, 사용자에게로의 디스플레이, 또는 수반되는 소프트웨어 어플리케이션을 위한 준비에 이용가능한 쿼리 결과(260)를 생성한다. 타겟 컴파일러(230) 및 대응하는 실행 엔진(240)은 XML 및 SQL와 같은 쿼리 언어를 포함할 수 있다.
본 아키텍처의 다른 양상은 데이터 이용가능성의 모듈성이다. 예를 들어, 최적화된 XML 쿼리 표현이 생성되는 지점 (예를 들어, 타겟 생성기(230)로 입력되는 지점)에서, 최적화된 XML 쿼리 중간 언어 표현이 다른 시스템에서 사용될 수 있도록하거나 지연된 타겟 컴파일링을 위해 이용될 수 있도록하기 위해 출력이 생성될 수 있다. 그러므로, 최적화된 XML 쿼리 표현은 실제 우선적으로 특정하고 XML이 아닌 명령 쿼리로 변환되지 않고 직접 실행될 수 있다. 그러므로, XML 중간 언어는 최적화된 XML 쿼리 중간 언어 표현을 실행하기 위해 특별히 개조된 실행 엔진을 사용하는 컴파일러 없이 하나 이상의 데이터 소스들을 쿼리하기 위해 사용될 수 있다. 시스템 출력의 다른 옵션(option)에서, 타겟 컴파일러 출력(들)은 개별적인 시스템 내의 또는 다른 비시스템(non-system) 어플리케이션에 의한 실행을 위한 출력으로 사용될 수 있다.
도 2의 예시적인 아키텍처는 본래 쿼리를 구성하는데 큰 융통성을 허용한다. 수많은 쿼리들을 합성한 최적화된 XML 중간 언어가 생성될 수 있도록 쿼리 아키텍처는 다수의 쿼리가 입력되는 것을 허용한다. 추가적으로, 다수의 백 엔드 타겟 컴파일러 및 실행 엔진들은 상이한 데이터 모델의 데이터 소스를 적절하게 쿼리하기 위해 사용될 수 있다. 아키텍처(200)는 또한 프론트 엔드컴파일러 및 백 엔드 컴파일러의 순열(permutation)의 수를 줄이는 것도 허용한다. 도 2는 M개의 프론트 엔드컴파일러 및 N개의 백 엔드 컴파일러를 나타내며, 여기서 M 및 N은 정수이다. 보통, 이러한 조합은 M 곱하기 N개의 가능한 시스템 경로의 전체 수를 산출할 것이다. 그러나, 공통 중간 언어 사용때문에, 순열의 수는 M과 N의 합으로 유리하게 준다.
도 3은 본 발명을 따르는 최적화의 예시적인 흐름에 관한 순서도(300)를 나타낸다. 초기에, 쿼리의 중간 언어 표현이 수신된다(310). 이러한 중간 언어 표현은 상술된 것과 같은 쿼리 중간 언어 또는 MSIL과 같은 몇몇의 기타 중간 언어일 수 있다. 중간 언어는 그래프 또는 노드 구조일 것이라 가정된다. 프로세스(300)는 그후 노드 유형 및 코드 패턴을 판정하기 위해 중간 언어 내의 노드를 검사한다(320). 노드 유형 및 코드 패턴을 식별할 때, 패턴들은 최적화될수 있는 패턴인지를 식별하기 위해 분석된다(330). 이러한 비교는 최적화하기 위한 후보들을 식별할 수 있는 노드 유형 및/또는 코드 패턴의 사전 저장된 세트(set)를 비교하므로써 수행될 수 있다. 대안적으로, 알고리즘은 최적화하기 위한 코드 패턴을 식별하기 위해 노드 유형 식별과 함께 사용될 수 있다.
만약 노드 유형의 검출된 패턴이 최적화될 수 있으면, 코드 패턴은 대체에 의해 최적화된다(340). 대안적으로, 만약 불필요한 반복이 검출되면, 반복을 제거할 수 있는 정규화가 야기될 수 있다(340). 정규화 또는 최적화의 결과로, 수정된 및 수정되지 않은 일부들은 모아지고(360) 집합된다.
만약 노드 유형의 검출된 패턴이 노드 유형 또는 코드 패턴과 매치하지 않아서 최적화되지 않으면(330), 그후 검사된 코드는 전달되어(350) 검사된 코드가 수집된다(360).
일단 코드가 수집되면(360), 프로세스(300)는 중간 언어 표현이 정규화/최적화 목적을 위해 완전히 검사되었는지를 판정한다. 만약 코드가 완전히 검사되지 않았으면, 다음 노드가 검사되고(320) 검사 및 최적화의 프로세스가 반복된다. 만약 프로세스(300)가 중간 언어 표현 노드를 검사하는 것을 완료하면, 그후 집합된 코드는 전달되고 최적화된 쿼리가 결과로 나온다(380).
도 4는 최적화 및 정규화를 위한 도 3의 프로세스에 대해 대안적으로 사용될 수 있는 예시적인 프로세스(400)의 순서도이다. 초기에, 최적화(405)를 위한 사전 컴파일된 패턴들은 액세스가능 메모리 저장 장치에 저장될 수 있다. 프로세스(400)는 그후 중간 언어 표현(410)을 수신할 수있다. 상술된 것처럼, 중간 언어 표현은 표현의 QIL, MSIL, 또는 몇몇의 기타 그래프 또는 노드 유형이 될 수 있다. 여기서, 중간 언어 표현은 그래프의 하부에서부터 상향으로 검사된다. 각각의 노드가 프로세스(400)에 의해 방문될 때, 잠재적인 정규화 및 최적화가 나타내지고 속성으로 태깅된다(430). 속성은 어떤 종류의 정규화 또는 최적화가 바람직한지를 식별하기 위해 사용된다.
프로세스(400)는 그후 전체 트리가 검사되었는지를 체크한다(440). 만약 프로세스가 아직 완료되지 않았으면, 그후 프로세스(400)는 다음 노드를 테스트하기 위해 그래프 내에서 상향이동하고(445) 잠재적인 최적화를 식별한다(430).
만약 중간 언어의 전체 그래프를 체크하는 프로세스가 완료되면(440), 그후 프로세스(440)는 그래프의 상부로 이동하고 노드에 태깅된 속성들을 검색한다(450). 몇몇의 태깅된 속성들은 반복되는 노드와 같은 정규화된 것들이거나, 대체 코드와 같은 최적화된 것들이다. 속성들은 필요한 액션의 종류(즉, 리던던시(redundancy) 삭제, 최적화 대체 등)를 표시한다. 프로세스(400)는 태깅된 노드에서 태깅된 노드 위치의 상부에서 하부로 최적화/정규화를 실행한다(460). 최적화 구현의 실행의 마지막에, 전체 쿼리는 노드 유형 연산식으로부터 재구성될 수 있고 최적화된 쿼리(470)가 결과로 나온다.
중간 언어 표현으로 쿼리 다시쓰기를 기재하기 위한 통지를 확립하는 것이 유익하다. 다시쓰기는 포함된 노드 유형에 의존할 수 있고, 때때론 유형 또는 값의 조건들과 같은 추가적인 조건이 발생하는 다시쓰기에 대해 만족되는 것이 바람직할 수 있다. 노드 중심이지만 추가적인 조건이 지정되도록 하는 구문(syntax)은 본 발명의 실시예에서 바람직하게 사용된다.
본 기술에 능숙한 사람은 노드 이름이 LISP 언어의 노드들처럼 괄호 안에 있다는 것을 인식할 것이다. 노드의 자식은 만약 있다면 그 노드의 이름을 따를 수 있다. 그러므로, (X Y Z)가 두개의 자식 노드 Y 및 Z를 갖는 노드 X를 의미하는 반면, (X)는 단일 노드 X를 의미한다. 자식의 순서는 중요하다. 트리 연산식의 예에서, 1+1=2 는 다음과 같이 쓰여질 수 있다.:
(Eq(Plus(Integer1)(Integer1))(Integer2))
다시쓰기에서, 대체 구조는 그들을 분리하기 위해 토큰(token) => 을 사용하여 매치 패턴 뒤에 쓰여질 수 있다. 전체 규칙은 또한 사각괄호 내의 이름에 의해 선행될 수 있다. 이 이름은 묘사적일 수 있다. 한 실시예에서, 이런 규칙들은 코드 최적화 내의 융통성을 위해 선택적으로 이용가능할 수도 불가능할 수도 있다. 다시쓰기 규칙의 예는 다음과 같을 수 있다.:
[EliminateOr]
(Or(True)(False)) => (True)
코드 패턴은 또한 패턴이 임의의 노드 종류에 매치하도록 허용한다. 이것은 와일드카드 매치(wildcard match; *)를 사용해 표시될 수 있다. 전형적으로, 임의의 패턴은 변수($variableName) 및 콜론(:)와 함께 선행되므로써 레이블(label)될 수 있다. 그후, 변수 이름은 노드 대신 매치 패턴 또는 대체 내에서 사용될 수 있다. 레이블은 일반적으로 백 엔드참조 표현 방법만을 제공한다. 백 엔드참조 및 와일드카드를 갖는 그래프의 예는 다음과 같을 수 있다.:
(Sort $i:(For(List))(Desc(Negate $x:*))) => (Sort $i(Asc $x))
추가적인 조건은 특정한 통지에 의해 표현될 수 있다. 노드 패턴은 굽은 중괄호로 둘러쌓인 코드와 함께 뒤따라질 수 있다. 코드는 영역 내에 있는 임의의 변수를 참조할 수 있다. 예를 들어, 코드 조건을 갖는 그래프 예는 다음과 같을 수 있다.:
(IsEmpty $x:* {$x.IsEmpty}) => (True)
패턴 문법의 확장된 배커스-나우어형(extended Backus-Naur form; EBNF) 기재가 다음에 나타나고 이것이 패턴 문법을 보여준다.
P :=Pattern*
Pattern :=Descr Match '=>'Action
Descr :='['Ident']'
Action :=Replace|Code
Code :='{'(Code|[^{}])*'}'
Match :=(Label':')?(Node|Wildcard|String|Number)Code?
Label :='$'Ident
Node :='('Ident Match*')'
Replace :=Label|PatNode
PatNode :='('Ident Action*')'
Wildcard :='*'
Ident :=[_A-Za-z][_A-Za-z0-9\-]*
String :='"'[^"]*'"'
Number :=[0-9]+
도 5는 연산식의 다시쓰기가 중간 언어 코드의 최적화를 허용하는 곳의 최적화의 예를 나타낸다. 본래의 코드(510)는 XML 쿼리의 쿼리 중간 언어 표현의 실시예이다. 최적화 결과(520)는 특정한 섹션(section)을 다시쓰기한 특정 코드와 동일한 코드이다. 예를 들어, 중간 언어 표현(510)의 점선 부분(515)은 최적화된 형태(520)로 변환될 수 있다. 최적화는 다시쓰기(520) 내의 점선으로 표시된 삽입부분(525)처럼 나타내질 수 있다.
전형적으로, 도 5 내의 것들과 같은 다시쓰기는 한번에 모두 수행되지 않고, 대신에 그래프의 몇몇 부분을 각각 조종하는 작은 크기의 다시쓰기로 나뉘어진다. 도 6에 나타난 것처럼, 이런 작은 크기의 다시쓰기는 원하는 전체 효과를 달성하기 위해 가급적 단계적으로 진행된다.
도 6은 다시쓰기의 예시적인 단계 시리즈를 표현한다. 본래의 텍스트(610)의 제 1 섹션은 규칙에 의해 기재된 부모 제거를 통한 변환(612)을 사용해 최적화(615)로 다시쓰여질 수 있다.:
[EliminateParent]
(Parent(For(Content $x:*))) => $x
중간 코드 표현(620)의 다음 섹션은 규칙에 의해 기재된 투플(tuple) 제거를 통한 변환(622)을 사용해 최적화(625)로 다시쓰여질 수 있다.:
[EliminateTuple]
(Tuple $i:(For $x:*)(True) $j:*) {$i==$j} => $x
다시쓰기 코드(630)에 대한 또다른 프로세싱은 규칙에 의해 기재된 루프 불변의 코드 모션을 통한 변환(632)을 사용하여 다시쓰기(635)를 발생시킨다.:
[IntroduceNTimes]
(Tuple $i:* $w:* $r:*){!DependsOn($r, $i)}
=> (NTimes $r(Lenght(Tuple $i $w $i)))
결과적인 다시쓰기는 쿼리 코드(640)로 삽입될 수 있고 규칙에 의해 기재된 투플 다시쓰기를 통한 변환(642)을 사용해 또다른 다시쓰기(645)가 될 수 있다.
[EliminateNTimes]
(DocOrderDistinct $t:(Tuple***))
=> {
QilTuple last = $t.LastTuple;
if(last.Return.Type == QilNodeType.NTimes){
QilBinary ntimes = (QilBinary)last.Return;
QilList list = f.List();
list.Type = f.TypeFactory.Sequence(QilCardinality.Zero, ntims.Type);
last.Return = Replace($0.EliminateNTimes, ntimes, f.Conditional(f.Gt(ntimes.Right, f.Int32(0)), ntimes.Left, list));
}
}
결과적인 코드의 구조들은 본래의 중간 표현(650)으로 삽입될 때 규칙을 통해 기재된 논리적인 다시쓰기를 통한 변환(652)에 의해 더 최적화(655)될 수 있다.:
[IntroduceExists]
(Gt(Length $x:*)(LiteralInt32 0)) => (Not(IsEmpty $x))
전체의 결과적인 코드(660)의 또다른 다시쓰기는 규칙에 의해 기재된 투플다시쓰기의 변환(662)에 의해 최적화(655)될 수 있다.:
[FoldTupleConditional]
(Tuple $i:* $w:* (Conditional $cond:* $return:* $list:(List)
{$list.QilType.IsEmpty}))
=> (Tuple $i(And $w $cond) $return)
결과적인 코드(665)가 도 5의 본래의 중간 언어 쿼리(510)에 삽입되면, 결과는 도 5의 최적화된 중간 코드(520)에 나타난 것과 같은 최적화이다. 그러므로 다수의 다시쓰기가 본 발명의 최적화 프로세스에 사용될 수 있다.
최적화 및 정규화 기재
최적화는 전형적으로 로컬(local) 최적화 또는 글로벌(grobal) 최적화로 분류된다. 상수 폴딩(folding)과 같은 로컬 최적화는 그래프의 작은 크기의 접속된 영역을 관찰하므로써 수행될 수 있다. 데드(dead) 코드 제한과 같은 글로벌 최적화는 전체 그래프를 관찰하므로써 수행될 수 있다. 본 발명의 양상을 따라 수행된 예시적인 최적화는 다음으로 요약된다.:
상수 폴딩
논리적인 다시쓰기
기본 경로 다시쓰기(자식, 속성)
기타 경로 다시쓰기(루트, 부모, 자신, 자손, 등)
루프-불변 코드 모션
투플 다시쓰기
위치 다시쓰기
투영 다시쓰기
투플 및 리스트 전환
벤치마크(XSLT, XMark, 등)
펑션 경계에 걸친 구성
유형 폴딩
펑션 인라이닝(function inlining)
공통 하부연산식 제거
데드 펑션 제거
제거/그루핑 정렬
수행되는 로컬 정규화는 상수 폴딩, 전환(commutations), 경로 다시쓰기, 공통 하부연산식 제거, 펑션 인라이닝, 및 잡다한 정규화와 같은 몇몇의 상이한 범주로 그루핑될 수 있다. 최적화 규칙 및 기술의 예시적인 견본은 여기에 첨부된 부록Ⅰ에 제공된다.
상수 폴딩 최적화
상수 폴딩은 특정한 컴파일시간 상수를 제거하는 것을 포함한다. 이런 최적화는 쿼리 크기를 줄이고, 생성될 코드의 크기를 줄이고, 루프 상황의 성능에 현저하게 영향을 줄 수 있다. 상수 폴딩 패턴은 최적화기에 의해 수행되는 대부분의 패턴을 구축한다.
논리적인 다시쓰기 최적화
몇몇의 다시쓰기는 정확히 상수 폴딩이 아니지만, 연산식의 논리적 복잡도를 줄인다. 기타의 것들은 SQL로 직접 번역될 수 없는 두개의 불 연산식을 비교하는 것과 같이 불규칙적인 형태를 규칙적인 형태로 바꾼다. 이런 규칙적인 형태는 SQL로 직접 번역될 수 있는 불 연산식(Boolean expression) 상에서 논리적 연산을 수행한다.
기본 경로 다시쓰기(자식, 속성) 최적화
네비게이션 최적화는 XQuery가 구성적이기 때문에 쿼리를 수행할 수 있다(즉, 네비게이션을 기타 XQuery 연산식으로 지원). QIL과 같은 중간 언어 내의 경로는 일반적으로 단일 연산자와 함께 나타내진다. 결론적으로, 경로 다시쓰기는 예를 들어, EliminateNameOf 등의 상수 폴딩 패턴과 같은 작은 크기의 많은 다시쓰기로 구성될 수 있다. 추가적으로, 몇몇의 경로 다시쓰기는 ElementCtor 및 AttributeCtor과 같은 구조 연산자와 함께 상수 및 속성과 같은 네비게이션 연산자를 폴딩하는 것을 포함한다.
루프-불변 코드 모션 최적화
루프-불변 코드 모션은 루프(즉, 루프-불변) 동안 변하지 않는 루프 내에 만들어진 계산이 빠질 수 있는 (즉, 코드 모션) 공통 최적화 기술이다. 이 방법에 의해서, 계산은 루프를 여러번 반복하는 대신 단 한번만 수행된다.
전환 최적화
전환은 모음을 통한 반복 또는 반복을 통한 반복을 해결하는 것을 포함하는 다시쓰기의 클래스이다. 이런 다시쓰기는 일반적으로 AB => f(B)g(A) 형태의 전환이다. 즉, B에 적용된 A는 A에 적용된 B 또는 A의 몇몇의 펑션에 적용된 B, 또는 다음 차례에 각각의 B의 멤버(member)에 적용될 A의 리스트로 다시써진다. 몇몇의 전환 패턴은 패턴 언어를 사용해 완전히 표현하기에 너무 복잡할 수 있다. 그러므로, 이러한 패턴들은 전형적으로 대체를 수행하는 코드 액션이 뒤따르는 매치 패턴들 갖을 수 있다.
투플 다시쓰기
QIL에서, 투플 및 필터 노드 유형 (및 레가시(legacy) 투플 노드 유형)은 특정한 역할을 점유하므로 임의의 기타 범주로 분류되지 않은 그들에 관련된 특정한 다시쓰기를 가질 수 있다.
위치 다시쓰기
상술된 것처럼, 위치를 보호하는 것은 최적화에 장벽을 제공할 수 있다. 그러므로, 위치 연산자를 제거하는 것은 매우 가치있는 최적화이다. 추가적으로, 위치 연산자는 특정한 제한을 만족시킨다. 예를 들어, 그것은 항상 최소한 1개 및 최대한 세트의 길이만큼이다. 추가적으로, 위치를 사용하는 특정한 복잡한 패턴들은 여전히 그것을 보호하는 방법으로 다시써질 수 있다.
벤치마크
비록 최적화기가 중요하지 않지만(그들은 여전히 최적화 기회를 나타냄), 벤치마크는 악명 높게 현실 조건을 나타내지 않는다.
제거/그루핑 정렬
정렬 패턴은 크게 두가지가 있다. 정렬 패턴중 한가지 유형은 예를 들어,이미 문서 순서 내에 있는 연산식에 문서 순서를 적용시키는 것과 같은 불필요한 정렬을 제거한다. 다른 정렬 패턴은 다수의 전달을 사용하는 백 엔드 컴파일러에 의해 구현될 수 있는 그룹핑 패턴을 인식할 수 있다.
상술된 것처럼, 본 발명의 예시적인 실시예가 다양한 컴퓨팅 장치들 및 소프트웨어 아키텍처에 연관되 기재되는 동안, 기본 개념은 코드 최적화기를 구현하기에 바람직한 임의의 컴퓨팅 장치 및 시스템에 적용될 수 있다. 그러므로, 본 발명의 방법 및 시스템은 다양한 어플리케이션 및 장치들에 적용될 수 있다. 예시적인 프로그래밍 언어, 이름, 및 예들이 다양한 선택(choice)의 대표로서 여기에 선택되었지만, 이런 언어, 이름, 및 예들은 제한을 두기위한 것은 아니다. 본 기술에 숙련된 사람들은 본 발명에 의해 달성되는 동일한, 유사한, 또는 같은 시스템 및 방법들을 달성하는 오브젝트 코드를 제공하는 다양한 방법이 있다는 것을 인식할 것이다.
여기에 기재된 다양한 기술들은 하드웨어 또는 소프트웨어에 관련되어 구현될 수 있으며, 적절할 때는 그 둘 모두의 조합에 관련되어 구현될 수 있다. 그러므로 본 발명, 본 발명의 특정한 양상, 또는 본 발명의 일부에 관한 방법 및 기구는 플로피 디스켓, 씨디롬, 하드 드라이브, 또는 임의의 기타 기계 판독가능 저장 매체 등의 유형(tangible) 매체에 구현된 프로그램 코드(즉, 명령)의 형태를 취할 수 있으며, 프로그램 코드가 컴퓨터와 같은 기계에 로드되고 그 기계에 의해 실행될 때, 그 기계는 본 발명을 구현하기 위한 기구가 된다. 프로그램가능 컴퓨터 상에서 프로그램 코드가 실행되는 경우, 컴퓨팅 장치는 일반적으로 프로세서, 프로세서에 의해 판독가능한 저장 매체(휘발성 및 비휘발성 메모리 및/또는 저장 요소 포함), 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함할 것이다. 본 발명의 단일 프로세싱 서비스를 이용할 수 있는 하나 이상의 프로그램은 컴퓨터와 통신하기 위해, 예를 들어, 데이터 프로세싱 API 또는 그와 유사한 것을 사용하여 가급적 높은 레벨(level)의 절차 프로그래밍 언어 또는 오브젝트 지향 프로그래밍 언어로 구현된다. 그러나, 만약 원한다면, 프로그램(들)은 어셈블리(assembly) 또는 기계 언어로 구현될 수 있다. 임의의 경우에, 언어는 컴파일 또는 번역된 언어일 수 있고, 하드웨어 구현과 조합될 수 있다.
본 발명의 방법 및 기구는 또한 전기선 또는 케이블, 광섬유, 또는 임의의 기타 전송 형식과 같은 몇몇의 전송 매체를 통해 전송된 프로그램 코드 형태로 구현된 통신을 통해 실행될 수도 있으며, 프로그램 코드가 EPROM, 게이트 배열, 프로그램 가능 논리 장치(PLD), 클라이언트 컴퓨터, 비디오 기록기 등의 기계장치, 또는 상술된 예시적인 구현에 기재된 것과 같은 단일 프로세싱 기능을 갖는 수신 기계장치에 수신되고 로드된 후 이러한 기계장치에 의해 실행될 때 본 발명을 구현하기 위한 기구가 된다. 범용 프로세서 상에서 구현될 때, 프로그램 코드는 본 발명의 기능들을 실행시키기 위해 작동하는 유일한 기구를 제공하기 위해 프로세서와 조합한다. 추가적으로, 본 기술에 연관되 사용되는 임의의 저장 기술은 늘 하드웨어 및 소프트웨어의 조합이 될 수 있다.
본 발명이 다양한 형태의 바람직한 실시예들과 관련하여 기재되었지만, 기타 유사한 실시예들이 사용되거나, 수정 및 추가들이 본 발명을 벋어나지 않고 본 발명과 동일한 펑션을 수행하기 위한 기재된 실시예에 만들어질 수 있다. 그러므로, 특히 다수의 무선 네트워크 장치들이 계속 증가할 때, 기획된 핸드헬드 장치 운영 시스템 및 기타 어플리케이션 특정 운영 시스템들을 포함하는 컴퓨터 플랫폼(platform)의 다양성이 강조되야한다. 그러므로, 본 발명은 임의의 단일 실시예에 제한되선 안되고, 그보다 첨부된 청구항에 따르는 범위 및 영역 내에 구현되야 한다.
부록Ⅰ
다음의 첨부된 자료는 본 발명에 따르는 예시적인 실시예의 부분이 될 수 있는 최적화의 예를 포함한다. 이 리스트는 단지 예시적인 것일 뿐이며, 더 많은 예들이 본 발명의 영역 및 취지 내에 가능하다.
예시적인 상수 폴딩 유형 최적화
불 연산자를 위한 상수 폴딩 패턴
모집 연산자를 위한 상수 폴딩 패턴
산술 연산자를 위한 상수 폴딩 패턴
스트링 연산자를 위한 상수 폴딩 패턴
값 비교 연산자를 위한 상수 폴딩 패턴
XML 노드 속성을 위한 상수 폴딩 패턴
유형 연산자를 위한 상수 폴딩 패턴
XPath 연산자를 위한 상수 폴딩 패턴
논리적인 다시쓰기 패턴
기본 경로 다시쓰기 패턴
기타 경로 다시쓰기 패턴
루프 불변 다시쓰기 패턴
투플 다시쓰기 패턴
위치 다시쓰기 패턴
전환 패턴
유형 폴딩 패턴
제거/그루핑 정렬 패턴
본 발명은 XML 지향 실행시간 쿼리 프로세싱 방법론을 포함하는 예시적인 시스템을 구현한다. 이 방법론은 다수의 MXL 쿼리들을 취하고, 그들을 중간 언어 표현으로 번역하고, 최적화를 수행하고, 및 그후 데이터 리소스 포멧(format)과 호환될 수 있는 형태로 쿼리들을 컴파일한다.

Claims (16)

  1. 입력 쿼리(query)에 대한 최적 표현을 구성하기 위한 방법에 있어서,
    상기 입력 쿼리를 수신하는 단계- 상기 입력 쿼리는 노드(node)를 포함하는 중간 언어 표현이고, 각각의 노드는 각각의 노드 유형을 가짐 -;
    최적화하기 위한 노드 유형을 식별하기 위해 좌측-깊이(left-depth) 우선 방식으로 상기 노드를 검사하는 단계;
    상기 식별된 노드 유형에 대응하는 노드를 태깅(tagging)하는 단계;
    상기 입력 쿼리의 상기 중간 언어 표현이 완전히 검사될 때까지 다음 노드로 상향 이동하는 단계;
    상기 중간 언어 표현의 상부에서부터 태깅된 노드를 검색하고 최적화될 관련 코드 패턴을 식별하는 단계; 및
    상기 입력 쿼리에 대한 최적 표현을 형성하기 위해 상기 식별된 코드 패턴들을 개선된 코드 패턴들로 조정하는 단계를 포함하는 방법.
  2. 제 1 항에 있어서, 상기 수신하는 단계는 의미 중간 언어 표현을 수신하는 단계를 포함하는 방법.
  3. 제 2 항에 있어서, 상기 의미 표현은 노드를 포함하는 그래프 구조를 포함하는 방법.
  4. 제 1 항에 있어서, 상기 개선된 코드 패턴은 상수 폴딩(folding), 논리적인 다시쓰기(rewrite), 경로 다시쓰기, 루프(loop) 불변 코드 다시쓰기, 투플(tuple) 다시쓰기, 위치 다시쓰기, 전환(commutation), 인라이닝(inlining) 및 정렬 제거 중 적어도 하나를 포함하는 하나 이상의 변환(translation)을 사용해서 생성되는 방법.
  5. 입력 쿼리에 대한 최적 표현을 구성하는 방법을 수행하기 위한 컴퓨터 실행가능 명령을 갖는 컴퓨터 판독가능 매체에 있어서,
    상기 방법은,
    상기 입력 쿼리를 수신하는 단계- 상기 입력 쿼리는 코드 패턴 및 노드를 포함하는 중간 언어 표현이고, 각각의 노드는 각각의 노드 유형을 가짐 -;
    최적화의 대상인 코드 패턴 및 노드 유형을 식별하기 위해 좌측-깊이 우선 방식으로 상기 노드를 검사하는 단계;
    상기 입력 쿼리의 상기 중간 언어 표현이 완전히 검사될 때까지 상기 식별된 코드 패턴을 태깅하는 단계;
    상기 중간 언어 표현의 상부에서부터 태깅된 코드 패턴을 검색하는 단계; 및
    상기 입력 쿼리에 대한 최적 표현을 형성하기 위해 상기 태깅된 코드 패턴을 개선된 코드 패턴으로 조정하는 단계를 포함하는 컴퓨터 판독가능 매체.
  6. 입력 쿼리의 최적 표현을 생성하기 위한 컴퓨터 시스템에 있어서,
    입력 쿼리를 수신하기 위한 입력 장치;
    노드를 포함하는 중간 언어 표현을 상기 입력 쿼리로부터 생성하는 하나 이상의 중간 언어 컴파일러; 및
    최적화기를 포함하고,
    상기 최적화기는,
    상기 입력 쿼리를 수신하는 단계- 상기 입력 쿼리는 노드를 포함하는 중간 언어 표현이고, 각각의 노드는 각각의 노드 유형을 가짐 -;
    최적화하기 위한 노드 유형을 식별하기 위해 좌측-깊이 우선 방식으로 상기 노드를 검사하는 단계;
    상기 식별된 노드 유형에 대응하는 노드를 태깅하는 단계;
    상기 입력 쿼리의 상기 중간 언어 표현이 완전히 검사될 때까지 다음 노드로 상향 이동하는 단계;
    상기 중간 언어 표현의 상기 상부에서부터 태깅된 노드를 검색하고 최적화될 관련 코드 패턴을 식별하는 단계; 및
    상기 입력 쿼리에 대한 최적 표현을 형성하기 위해 상기 식별된 코드 패턴을 개선된 코드 패턴으로 조정하는 단계를 수행하는 컴퓨터 시스템.
  7. 제 6 항에 있어서, 쿼리 결과를 만드는 최적화후(post-optimization) 처리를 더 포함하고,
    상기 최적화후 처리는,
    상기 최적 표현을 타겟 쿼리를 형성하는 하나 이상의 타겟 표현으로 변환하는 하나 이상의 타겟 생성기;
    쿼리의 대상인 하나 이상의 데이터 소스(source); 및
    상기 하나 이상의 데이터 소스에 대해 상기 타겟 쿼리를 실행하여 상기 쿼리 결과를 생성하는 하나 이상의 실행 엔진을 포함하는 시스템.
  8. 하나 이상의 입력 쿼리의 XML 중간 언어 표현의 최적 표현을 생성하기 위한 컴퓨터 시스템에 있어서,
    상기 하나 이상의 입력 쿼리를 수신하기 위한 하나 이상의 입력 장치;
    입력 쿼리의 중간 언어 표현을 각각 생성하는 하나 이상의 중간 언어 컴파일러;
    각각의 중간 언어 표현을 단일 XML 중간 언어 표현으로 조합하는 표현 누산기; 및
    최적화기를 포함하고;
    상기 최적화기는,
    상기 입력 쿼리를 수신하는 단계- 상기 입력 쿼리는 코드 패턴 및 노드를 포함하는 중간 언어 표현이고, 각각의 노드는 각각의 노드 유형을 가짐 -;
    최적화의 대상인 코드 패턴 및 노드 유형을 식별하기 위해 좌측-깊이(left-depth) 우선 방식으로 상기 노드를 검사하는 단계;
    상기 입력 쿼리의 상기 중간 언어 표현이 완전히 검사될 때까지 상기 식별된 코드 패턴을 태깅하는 단계;
    상기 중간 언어 표현의 상부에서부터 태깅된 코드 패턴을 검색하는 단계; 및
    상기 입력 쿼리에 대한 최적 표현을 형성하기 위해 상기 태깅된 코드 패턴을 개선된 코드 패턴으로 조정하는 단계를 수행하는 컴퓨터 시스템.
  9. 제 8 항에 있어서, 상기 하나 이상의 입력 쿼리는 XML 쿼리 및 XML 뷰(view) 중 적어도 하나를 포함하는 컴퓨터 시스템.
  10. 제 8 항에 있어서, 쿼리 결과를 형성하는 최적화후 처리를 더 포함하고,
    상기 시스템은,
    상기 최적 표현을 타겟 쿼리를 형성하는 하나 이상의 타겟 표현으로 변환하는 하나 이상의 타겟 생성기;
    쿼리의 대상인 하나 이상의 데이터 소스; 및
    상기 하나 이상의 데이터 소스에 대해 상기 타겟 쿼리를 실행하여 상기 쿼리 결과를 생성하는 하나 이상의 실행 엔진을 포함하는 컴퓨터 시스템.
  11. 입력 쿼리에 대한 최적 표현을 구성하기 위한 방법에 있어서,
    상기 입력 쿼리를 수신하는 단계- 상기 입력 쿼리는 노드를 포함하는 중간 언어 표현이고, 각각의 노드는 각각의 노드 유형을 가짐 -;
    각각의 노드 유형에 관련 코드 패턴을 검사하기 위해 상기 노드를 검사하는 단계;
    최적화되지 않은(non-optimized) 코드 패턴을 검출하기 위해 패턴 매치 알고리즘(algorithm)을 사용해 상기 검사된 코드 패턴들을 비교하는 단계; 및
    입력 쿼리에 대한 최적 표현을 형성하기 위해 상기 최적화되지 않은 코드 패턴 및 상기 검사된 코드 패턴들 중의 하나 이상을 개선된 코드 패턴으로 조정하는 단계를 포함하는 방법.
  12. 제 11 항에 있어서, 상기 수신하는 단계는 의미 중간 언어 표현을 수신하는 단계를 포함하는 방법.
  13. 제 12 항에 있어서, 상기 의미 표현은 노드를 포함하는 그래프 구조를 포함하는 방법.
  14. 제 11 항에 있어서, 상기 개선된 코드 패턴은 상수 폴딩, 논리적인 다시쓰기, 경로 다시쓰기, 루프 불변 코드 다시쓰기, 투플 다시쓰기, 위치 다시쓰기, 전환, 인라이닝(inlining) 및 정렬 제거 중 적어도 하나를 포함하는 하나 이상의 변환을 사용해서 생성되는 방법.
  15. 입력 쿼리에 대한 최적 표현을 구성하는 방법을 수행하기 위한 컴퓨터 실행가능 명령을 갖는 컴퓨터 판독가능 매체에 있어서, 상기 방법은,
    상기 입력 쿼리를 수신하는 단계- 상기 입력 쿼리는 노드를 포함하는 중간 언어 표현이고, 각각의 노드는 각각의 노드 유형을 가짐 -;
    각각의 노드 유형에 관련 코드 패턴을 검사하기 위해 상기 노드를 검사하는 단계;
    최적화되지 않은 코드 패턴을 검출하기 위해 패턴 매치 알고리즘을 사용해 상기 검사된 코드 패턴들을 비교하는 단계; 및
    입력 쿼리에 대한 최적 표현을 형성하기 위해 상기 최적화되지 않은 코드 패턴 및 상기 검사된 코드 패턴 중 하나 이상을 개선된 코드 패턴으로 조정하는 단계를 포함하는 컴퓨터 판독가능 매체.
  16. 하나 이상의 입력 쿼리의 XML 중간 언어 표현의 최적 표현을 생성하기 위한 컴퓨터 시스템에 있어서,
    상기 하나 이상의 입력 쿼리를 수신하기 위한 하나 이상의 입력 장치;
    입력 쿼리의 중간 언어 표현을 각각 생성하는 하나 이상의 중간 언어 컴파일러;
    각각의 중간 언어 표현을 단일 XML 중간 언어 표현으로 조합하는 표현 누산기; 및
    최적화기를 포함하고;
    상기 최적화기는,
    상기 입력 쿼리를 수신하는 단계- 상기 입력 쿼리는 노드를 포함하는 중간 언어 표현이고, 각각의 노드는 각각의 노드 유형을 가짐 -;
    각각의 노드 유형에 관련 코드 패턴을 검사하기 위해 상기 노드를 검사하는 단계;
    최적화되지 않은 코드 패턴을 검출하기 위해 패턴 매치 알고리즘을 사용해 상기 검사된 코드 패턴들을 비교하는 단계; 및
    입력 쿼리에 대한 최적 표현을 형성하기 위해 상기 최적화되지 않은 코드 패턴 및 상기 검사된 코드 패턴을 개선된 코드 패턴으로 조정하는 단계를 수행하는 컴퓨터 시스템.
KR1020040046467A 2003-06-23 2004-06-22 쿼리 최적화기 시스템 및 방법 KR20050000328A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/601,480 2003-06-23
US10/601,480 US7146352B2 (en) 2003-06-23 2003-06-23 Query optimizer system and method

Publications (1)

Publication Number Publication Date
KR20050000328A true KR20050000328A (ko) 2005-01-03

Family

ID=33418595

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040046467A KR20050000328A (ko) 2003-06-23 2004-06-22 쿼리 최적화기 시스템 및 방법

Country Status (5)

Country Link
US (1) US7146352B2 (ko)
EP (1) EP1492034A3 (ko)
JP (1) JP2005018767A (ko)
KR (1) KR20050000328A (ko)
CN (1) CN100517307C (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100756978B1 (ko) * 2005-11-02 2007-09-07 정민경 관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법
KR101277145B1 (ko) * 2011-12-07 2013-06-20 한국과학기술연구원 공통 표현을 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
KR20180061329A (ko) * 2015-10-01 2018-06-07 이베이 인크. 개념 그래프 생성하기

Families Citing this family (116)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7873649B2 (en) * 2000-09-07 2011-01-18 Oracle International Corporation Method and mechanism for identifying transaction on a row of data
US7519577B2 (en) * 2003-06-23 2009-04-14 Microsoft Corporation Query intermediate language method and system
US7165063B2 (en) * 2003-11-19 2007-01-16 International Business Machines Corporation Context quantifier transformation in XML query rewrite
US7562094B1 (en) 2003-12-31 2009-07-14 Precise Software Solutions, Inc. Object-level database performance management
US7747659B2 (en) * 2004-01-05 2010-06-29 International Business Machines Corporation Garbage collector with eager read barrier
US8775412B2 (en) * 2004-01-08 2014-07-08 International Business Machines Corporation Method and system for a self-healing query access plan
US20050223288A1 (en) * 2004-02-12 2005-10-06 Lockheed Martin Corporation Diagnostic fault detection and isolation
US20050240555A1 (en) * 2004-02-12 2005-10-27 Lockheed Martin Corporation Interactive electronic technical manual system integrated with the system under test
US7801702B2 (en) * 2004-02-12 2010-09-21 Lockheed Martin Corporation Enhanced diagnostic fault detection and isolation
US7398265B2 (en) * 2004-04-09 2008-07-08 Oracle International Corporation Efficient query processing of XML data using XML index
US7440954B2 (en) * 2004-04-09 2008-10-21 Oracle International Corporation Index maintenance for operations involving indexed XML data
US7603347B2 (en) * 2004-04-09 2009-10-13 Oracle International Corporation Mechanism for efficiently evaluating operator trees
US7487142B2 (en) 2004-06-10 2009-02-03 International Business Machines Corporation Methods and apparatus for specifying and processing descriptive queries for data sources
EP1759315B1 (en) * 2004-06-23 2010-06-30 Oracle International Corporation Efficient evaluation of queries using translation
US7516121B2 (en) * 2004-06-23 2009-04-07 Oracle International Corporation Efficient evaluation of queries using translation
US8566300B2 (en) * 2004-07-02 2013-10-22 Oracle International Corporation Mechanism for efficient maintenance of XML index structures in a database system
US7668806B2 (en) 2004-08-05 2010-02-23 Oracle International Corporation Processing queries against one or more markup language sources
US7849183B1 (en) 2004-08-31 2010-12-07 Precise Software Solutions, Inc. Method of monitoring network and application performance by analyzing web clients and web servers
US9171100B2 (en) 2004-09-22 2015-10-27 Primo M. Pettovello MTree an XPath multi-axis structure threaded index
US20060064395A1 (en) * 2004-09-23 2006-03-23 Seguin Christopher A Data element storage method
US20060120181A1 (en) * 2004-10-05 2006-06-08 Lockheed Martin Corp. Fault detection and isolation with analysis of built-in-test results
US20060085692A1 (en) * 2004-10-06 2006-04-20 Lockheed Martin Corp. Bus fault detection and isolation
US20080052281A1 (en) * 2006-08-23 2008-02-28 Lockheed Martin Corporation Database insertion and retrieval system and method
US20060182131A1 (en) * 2005-01-21 2006-08-17 L-3 Communications Corporation Gateway interface control
US8463801B2 (en) * 2005-04-04 2013-06-11 Oracle International Corporation Effectively and efficiently supporting XML sequence type and XQuery sequence natively in a SQL system
US20060235839A1 (en) * 2005-04-19 2006-10-19 Muralidhar Krishnaprasad Using XML as a common parser architecture to separate parser from compiler
US7949941B2 (en) * 2005-04-22 2011-05-24 Oracle International Corporation Optimizing XSLT based on input XML document structure description and translating XSLT into equivalent XQuery expressions
US20060256814A1 (en) * 2005-05-13 2006-11-16 Lockheed Martin Corporation Ad hoc computer network
US7599289B2 (en) * 2005-05-13 2009-10-06 Lockheed Martin Corporation Electronic communication control
US20060256770A1 (en) * 2005-05-13 2006-11-16 Lockheed Martin Corporation Interface for configuring ad hoc network packet control
US20060256717A1 (en) * 2005-05-13 2006-11-16 Lockheed Martin Corporation Electronic packet control system
US7427025B2 (en) * 2005-07-08 2008-09-23 Lockheed Marlin Corp. Automated postal voting system and method
US8166059B2 (en) * 2005-07-08 2012-04-24 Oracle International Corporation Optimization of queries on a repository based on constraints on how the data is stored in the repository
US7730079B2 (en) * 2005-08-30 2010-06-01 Microsoft Corporation Query comprehensions
US7664742B2 (en) * 2005-11-14 2010-02-16 Pettovello Primo M Index data structure for a peer-to-peer network
US7702642B1 (en) * 2005-12-07 2010-04-20 Precise Software Solutions, Inc. Method, system and computer-readable code for instrumenting code for logging database-related strings
US20070174309A1 (en) * 2006-01-18 2007-07-26 Pettovello Primo M Mtreeini: intermediate nodes and indexes
US7873627B2 (en) * 2006-01-18 2011-01-18 Microsoft Corporation Relational database scalar subquery optimization
US20070209464A1 (en) * 2006-02-27 2007-09-13 Roline Eric A Damped yoke bearing for a power steering system
US7502777B2 (en) * 2006-02-28 2009-03-10 Red Hat, Inc. System and method for self tuning object-relational mappings
US7499909B2 (en) * 2006-07-03 2009-03-03 Oracle International Corporation Techniques of using a relational caching framework for efficiently handling XML queries in the mid-tier data caching
US7962476B2 (en) * 2006-07-26 2011-06-14 Applied Minds, Inc. Method and apparatus for performing a depth-first join in a database
US7992171B2 (en) * 2006-09-06 2011-08-02 Qurio Holdings, Inc. System and method for controlled viral distribution of digital content in a social network
US20080065590A1 (en) * 2006-09-07 2008-03-13 Microsoft Corporation Lightweight query processing over in-memory data structures
US7739219B2 (en) 2006-09-08 2010-06-15 Oracle International Corporation Techniques of optimizing queries using NULL expression analysis
US7716210B2 (en) * 2006-12-20 2010-05-11 International Business Machines Corporation Method and apparatus for XML query evaluation using early-outs and multiple passes
JP5320787B2 (ja) * 2008-03-24 2013-10-23 富士通株式会社 検索キー最適化装置及び検索キー最適化プログラム
JP5060361B2 (ja) * 2008-03-28 2012-10-31 株式会社東芝 構造化文書検索装置、方法及びプログラム
US7917547B2 (en) * 2008-06-10 2011-03-29 Microsoft Corporation Virtualizing objects within queries
US8676841B2 (en) 2008-08-29 2014-03-18 Oracle International Corporation Detection of recurring non-occurrences of events using pattern matching
CN101408900B (zh) * 2008-11-24 2011-03-16 中国科学院地理科学与资源研究所 一种网格计算环境下的分布式空间数据查询优化方法
US20100191717A1 (en) * 2009-01-28 2010-07-29 Goetz Graefe Optimization of query processing with top operations
US8145859B2 (en) * 2009-03-02 2012-03-27 Oracle International Corporation Method and system for spilling from a queue to a persistent store
US8190595B2 (en) * 2009-03-28 2012-05-29 Microsoft Corporation Flexible query hints in a relational database
WO2010120929A2 (en) * 2009-04-15 2010-10-21 Evri Inc. Generating user-customized search results and building a semantics-enhanced search engine
US8321450B2 (en) 2009-07-21 2012-11-27 Oracle International Corporation Standardized database connectivity support for an event processing server in an embedded context
US8387076B2 (en) 2009-07-21 2013-02-26 Oracle International Corporation Standardized database connectivity support for an event processing server
US8386466B2 (en) 2009-08-03 2013-02-26 Oracle International Corporation Log visualization tool for a data stream processing server
US8527458B2 (en) 2009-08-03 2013-09-03 Oracle International Corporation Logging framework for a data stream processing server
US8204873B2 (en) * 2009-08-26 2012-06-19 Hewlett-Packard Development Company, L.P. System and method for query expression optimization
US8631028B1 (en) 2009-10-29 2014-01-14 Primo M. Pettovello XPath query processing improvements
US9430494B2 (en) 2009-12-28 2016-08-30 Oracle International Corporation Spatial data cartridge for event processing systems
US9305057B2 (en) 2009-12-28 2016-04-05 Oracle International Corporation Extensible indexing framework using data cartridges
US8959106B2 (en) 2009-12-28 2015-02-17 Oracle International Corporation Class loading using java data cartridges
US8713049B2 (en) 2010-09-17 2014-04-29 Oracle International Corporation Support for a parameterized query/view in complex event processing
US9189280B2 (en) 2010-11-18 2015-11-17 Oracle International Corporation Tracking large numbers of moving objects in an event processing system
US8429151B2 (en) * 2010-11-22 2013-04-23 Ianywhere Solutions, Inc. Highly adaptable query optimizer search space generation process
CN101984439A (zh) * 2010-12-09 2011-03-09 上海市共进通信技术有限公司 基于子查询实现数据源xml查询系统优化的方法
US20120150913A1 (en) * 2010-12-13 2012-06-14 Microsoft Corporation Multidimensional data-centric service protocol
US8990416B2 (en) 2011-05-06 2015-03-24 Oracle International Corporation Support for a new insert stream (ISTREAM) operation in complex event processing (CEP)
US9329975B2 (en) 2011-07-07 2016-05-03 Oracle International Corporation Continuous query language (CQL) debugger in complex event processing (CEP)
US8914353B2 (en) * 2011-12-20 2014-12-16 Sap Se Many-core algorithms for in-memory column store databases
US10365900B2 (en) 2011-12-23 2019-07-30 Dataware Ventures, Llc Broadening field specialization
EP2795484A4 (en) * 2011-12-23 2015-11-11 Univ Arizona State METHOD OF MICRO-SPECIALIZATION IN DATABASE MANAGEMENT SYSTEMS
EP2648115A1 (en) * 2012-04-03 2013-10-09 Seeburger AG Method and/or system for the execution of transformations of hierarchically structured data and relational data
JP6338579B2 (ja) * 2012-07-24 2018-06-06 アビニシオ テクノロジー エルエルシー データモデルにおけるエンティティのマッピング
US9262479B2 (en) 2012-09-28 2016-02-16 Oracle International Corporation Join operations for continuous queries over archived views
US9563663B2 (en) 2012-09-28 2017-02-07 Oracle International Corporation Fast path evaluation of Boolean predicates
CN102929996B (zh) * 2012-10-24 2015-06-03 华南理工大学 XPath查询优化方法及系统
US10956422B2 (en) 2012-12-05 2021-03-23 Oracle International Corporation Integrating event processing with map-reduce
US10298444B2 (en) 2013-01-15 2019-05-21 Oracle International Corporation Variable duration windows on continuous data streams
US9098587B2 (en) 2013-01-15 2015-08-04 Oracle International Corporation Variable duration non-event pattern matching
US9047249B2 (en) 2013-02-19 2015-06-02 Oracle International Corporation Handling faults in a continuous event processing (CEP) system
US9390135B2 (en) 2013-02-19 2016-07-12 Oracle International Corporation Executing continuous event processing (CEP) queries in parallel
US9418113B2 (en) 2013-05-30 2016-08-16 Oracle International Corporation Value based windows on relations in continuous data streams
US9934279B2 (en) 2013-12-05 2018-04-03 Oracle International Corporation Pattern matching across multiple input data streams
CA2940341A1 (en) 2014-03-14 2015-09-17 Ab Initio Technology Llc Mapping attributes of keyed entities
US9244978B2 (en) 2014-06-11 2016-01-26 Oracle International Corporation Custom partitioning of a data stream
US9712645B2 (en) 2014-06-26 2017-07-18 Oracle International Corporation Embedded event processing
US9886486B2 (en) 2014-09-24 2018-02-06 Oracle International Corporation Enriching events with dynamically typed big data for event processing
US10120907B2 (en) 2014-09-24 2018-11-06 Oracle International Corporation Scaling event processing using distributed flows and map-reduce operations
WO2017018901A1 (en) 2015-07-24 2017-02-02 Oracle International Corporation Visually exploring and analyzing event streams
CN105183809A (zh) * 2015-08-26 2015-12-23 成都布林特信息技术有限公司 一种云平台数据查询方法
US10339137B2 (en) * 2015-12-07 2019-07-02 Futurewei Technologies, Inc. System and method for caching and parameterizing IR
US10733099B2 (en) 2015-12-14 2020-08-04 Arizona Board Of Regents On Behalf Of The University Of Arizona Broadening field specialization
WO2017135837A1 (en) 2016-02-01 2017-08-10 Oracle International Corporation Pattern based automated test data generation
WO2017135838A1 (en) 2016-02-01 2017-08-10 Oracle International Corporation Level of detail control for geostreaming
CN107967208B (zh) * 2016-10-20 2020-01-17 南京大学 一种基于深度神经网络的Python资源敏感缺陷代码检测方法
US12045653B2 (en) 2017-06-22 2024-07-23 Dataware Ventures, Llc Field specialization to reduce memory-access stalls and allocation requests in data-intensive applications
CN108345648B (zh) * 2018-01-18 2021-01-26 奇安信科技集团股份有限公司 一种基于列式存储的获取日志信息的方法及装置
US11188531B2 (en) * 2018-02-27 2021-11-30 Elasticsearch B.V. Systems and methods for converting and resolving structured queries as search queries
US11914592B2 (en) 2018-02-27 2024-02-27 Elasticsearch B.V. Systems and methods for processing structured queries over clusters
US12032631B2 (en) 2018-05-30 2024-07-09 Ab Initio Technology Llc Systems and methods for dataflow graph optimization
US11461270B2 (en) 2018-10-31 2022-10-04 Elasticsearch B.V. Shard splitting
US10872085B2 (en) * 2018-11-02 2020-12-22 Microsoft Technology Licensing, Llc Recording lineage in query optimization
US10997204B2 (en) 2018-12-21 2021-05-04 Elasticsearch B.V. Cross cluster replication
US11431558B2 (en) 2019-04-09 2022-08-30 Elasticsearch B.V. Data shipper agent management and configuration systems and methods
US11943295B2 (en) 2019-04-09 2024-03-26 Elasticsearch B.V. Single bi-directional point of policy control, administration, interactive queries, and security protections
US10891165B2 (en) 2019-04-12 2021-01-12 Elasticsearch B.V. Frozen indices
US11182093B2 (en) 2019-05-02 2021-11-23 Elasticsearch B.V. Index lifecycle management
KR102269174B1 (ko) 2019-10-07 2021-06-24 고려대학교 산학협력단 스마트 컨트랙트 검증 장치 및 방법
US20200327118A1 (en) * 2020-06-27 2020-10-15 Intel Corporation Similarity search using guided reinforcement learning
US11604674B2 (en) 2020-09-04 2023-03-14 Elasticsearch B.V. Systems and methods for detecting and filtering function calls within processes for malware behavior
CN112346730B (zh) * 2020-11-04 2021-08-27 星环信息科技(上海)股份有限公司 一种中间表示的生成方法、计算机设备及存储介质
KR102378377B1 (ko) 2020-11-13 2022-03-24 고려대학교 산학협력단 스마트 컨트랙트 내의 취약 트랜잭션 시퀀스 획득 장치 및 방법
CN118605850A (zh) * 2024-08-07 2024-09-06 之江实验室 一种面向Triton编译器流水线的优化系统及优化方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6006214A (en) * 1996-12-04 1999-12-21 International Business Machines Corporation Database management system, method, and program for providing query rewrite transformations for nested set elimination in database views
US6526403B1 (en) * 1999-12-17 2003-02-25 International Business Machines Corporation Method, computer program product, and system for rewriting database queries in a heterogenous environment
US6934712B2 (en) * 2000-03-21 2005-08-23 International Business Machines Corporation Tagging XML query results over relational DBMSs
US6654734B1 (en) * 2000-08-30 2003-11-25 International Business Machines Corporation System and method for query processing and optimization for XML repositories
WO2002035395A2 (en) 2000-10-27 2002-05-02 Entigen Corporation Integrating heterogeneous data and tools
US6725212B2 (en) * 2001-08-31 2004-04-20 International Business Machines Corporation Platform-independent method and system for graphically presenting the evaluation of a query in a database management system
US6915290B2 (en) * 2001-12-11 2005-07-05 International Business Machines Corporation Database query optimization apparatus and method that represents queries as graphs

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100756978B1 (ko) * 2005-11-02 2007-09-07 정민경 관계형 데이터베이스에서 xml 문서 검색을 위한 질의처리 시스템 및 방법
KR101277145B1 (ko) * 2011-12-07 2013-06-20 한국과학기술연구원 공통 표현을 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
KR20180061329A (ko) * 2015-10-01 2018-06-07 이베이 인크. 개념 그래프 생성하기

Also Published As

Publication number Publication date
CN100517307C (zh) 2009-07-22
EP1492034A2 (en) 2004-12-29
EP1492034A3 (en) 2005-04-06
US7146352B2 (en) 2006-12-05
JP2005018767A (ja) 2005-01-20
CN1609855A (zh) 2005-04-27
US20050004892A1 (en) 2005-01-06

Similar Documents

Publication Publication Date Title
KR20050000328A (ko) 쿼리 최적화기 시스템 및 방법
Syme et al. Expert F♯
US6918107B2 (en) Programming language extensions for processing data representation language objects and related applications
US7627541B2 (en) Transformation of modular finite state transducers
US7519577B2 (en) Query intermediate language method and system
US7665073B2 (en) Compile time meta-object protocol systems and methods
US7624075B2 (en) Transformation of modular finite state transducers
US7739219B2 (en) Techniques of optimizing queries using NULL expression analysis
US7945904B2 (en) Embedding expression in XML literals
US20100088686A1 (en) Programming language with extensible syntax
Syme et al. Expert F♯ 3.0
AU2002318459A1 (en) Programming language extensions for processing data representation language objects and related applications
Syme et al. Expert F♯ 2.0
US20120042234A1 (en) XSLT/XPATH Focus Inference For Optimized XSLT Implementation
US20080033968A1 (en) Methods and apparatus for input specialization
Boshernitsan Harmonia: A flexible framework for constructing interactive language-based programming tools
US7774376B1 (en) Type-system extensions for object-oriented language based on coercive subtyping with restrictions
US20070050705A1 (en) Method of xml element level comparison and assertion utilizing an application-specific parser
US7912863B1 (en) Compositional lifting of operations over structural types
Bettentrupp et al. A Prototype for Translating XSLT into XQuery.
Lee et al. Formal models and algorithms for XML data interoperability
Mamas Design and implementation of an integrated software maintenance environment
Zhang Efficient XML stream processing and searching
Wagner et al. Comparative analysis of tools for automated software re-engineering purposes
Cisternino et al. Expert F

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
NORF Unpaid initial registration fee