2

Google App Engine 데이터베이스에 무향 그래프를 저장해야합니다. 최적화를 위해 database indexes을 사용하려고합니다. Google App Engine을 사용하여 인덱스를 만들 데이터베이스 테이블의 열을 정의하는 방법이 있습니까?Google App Engine 데이터베이스 인덱스

내 앱이 아이템 권장 사항에 대한 콘텐츠 기반 필터링에서이 저장된 무향 그래프를 사용하기 때문에 약간의 최적화가 필요합니다. 또한 추천 알고리즘은 일부 그래프 가장자리의 가중치를 업데이트합니다.

데이터베이스 인덱스를 사용할 수없는 경우 그래프 테이블의 쿼리 시간을 줄이려면 다른 방법을 제안하십시오. 알고리즘이 쓰기 작업보다 그래프 테이블에서 더 많은 데이터 검색 작업을 수행한다고 생각합니다.

추신 : 저는 파이썬을 사용하고 있습니다.

답변

3
+0

그래서 "select * from edges where vertex1 == x and vertex2 == y"와 같이 평등만을 사용하는 쿼리를 만들면 Google 애플리케이션 엔진이 자동으로 인덱스를 만듭니다. – fjsj

+1

사실, @ fjsj, 개발 웹 서버는 모든 작업을 수행 할 수 있습니다. The docs : 개발 웹 서버는 인덱스 구성 관리를 쉽게 만듭니다. 인덱스가없고 필요로하는 쿼리를 실행하지 못하는 대신 개발 웹 서버는 쿼리가 성공할 수 있도록 인덱스 구성을 생성 할 수 있습니다. 응용 프로그램의 로컬 테스트에서 응용 프로그램이 생성하는 모든 가능한 쿼리 (종류, 조상, 필터 및 정렬 순서의 모든 조합)를 호출하면 생성 된 항목이 완전한 인덱스 집합을 나타냅니다. –

1

당신은 실제로 엄청나게 느린 쿼리를보고있다? 나는 추측하고있다. 나는 이것이 다소 시기상조 한 최적화라고 생각한다. app 엔진 데이터 저장소는 메모리에서 정렬, 필터링, 조인 또는 다른 의미있는 작업을 수행하지 않으므로 쿼리 시간은 일반적으로 상당히 일정합니다. 특히 쿼리 대기 시간은 데이터 저장소의 엔터티 수 또는 쿼리와 일치하는 엔터티 수에 의존하지 않습니다. 그것은 당신이 요구하는 결과의 수에 달려 있습니다.

관련 메모에 데이터 저장소에 인덱스를 추가하면 이 아닌 기존 쿼리의 속도가 빨라집니다. 쿼리에 사용자 지정 인덱스가 필요한 경우 성능 저하없이 느리게 실행됩니다. 인덱스를 추가하기 전까지는 쿼리가 전혀 실행되지 않습니다.

select * from edges where vertex1 == x and vertex2 == y 언급 한 특정 쿼리의 경우 데이터 저장소는 사용자 지정 인덱스없이 실행할 수 있습니다. 자세한 내용은 this section of the docs을 참조하십시오.

간단히 말해, 필요한 쿼리를 실행하고 인덱스에 대해 너무 많이 생각하거나 DBA 인 것처럼 최적화하려고하지 마십시오. 그것은 관계형 데이터베이스가 아닙니다. : P