19

App Engine에 연결된 Android Project에 App-Engine Search API 또는 Datastore 중 어느 것을 사용해야하는지 결정하려고합니다. Google 문서가 만드는 유일한 차이점은Appengine Search API v Datastore

... 색인 검색에서 일치하는 문서가 10,000 개를 초과 할 수 없습니다. 이 매우 큰 결과 집합을 검색해야하는 응용 프로그램에 App Engine Datastore가 더 적합 할 수 있습니다.

데이터 저장소에 이미 매우 익숙해졌습니다. 누군가 10,000 개의 결과가 필요 없다고 가정 할 때 도움이 될까요?

  • 내 쿼리에 대한 데이터 저장소를 사용하여 대 Search API를 사용하여 어떤 장점이 있습니까 (위 인용 당, 하나 또는 다른를 사용하는 것이 현명한 것)? 필자의 경우 최종 사용자는 검색하고, 기존 항목을 업데이트하고, 새로운 항목을 생성 할 수 있어야합니다. 예를 들어 내 앱이 서점 인 경우 새 책을 추가하거나 기존 책에 리뷰를 추가하거나 특정 책을 검색 할 수 있어야합니다.
  • 내 데이터 구조는 콘텐츠가 최종 사용자에 의해 제공되는 구조입니다. 문서 대 Datastore 엔티티 : 업데이트하는 것이 더 저렴합니까? $$ 등
  • 그들은 서로 보완 할 수 있습니까? Datastore 및 Search API? 이점은 무엇입니까? 왜 두 사람이 쌍을 이루는 것을 고려할 것입니까? 캐치/비용은 얼마입니까?
+1

위대한 질문입니다. 그러나 선택된 대답은 subpar입니다. 나는 그 질문에 대해 표를 던질 것이지만 그 질문의 요점을 다루는 더 나은 대답이 필요하다. – learner

답변

5

중요한 차이점은 데이터 저장소에서는 내부 항목을 검색 할 수 없다는 점입니다. "전쟁과 평화"라는 책이 있다면 사용자가 검색 상자에 "전쟁 평화"를 입력하면 찾을 수 없습니다. 리뷰 등에서도 마찬가지입니다. 따라서 그것은 실제로 당신을위한 선택 사항이 아닙니다.

+3

더 정확히 말하자면 데이터 저장소에서는 '포함'으로 검색을 할 수 없으므로 여기서 두 단어로 검색하여 예제를 검색 할 수 있습니다. 데이터 저장소에는 최대 두 가지 부등식 만 허용하는 것과 같은 다른 제한 사항이 있습니다. –

+0

답변 해 주셔서 감사합니다. 이것은 많은 도움이됩니다. 그렇다면 데이터 저장소의 검색 API와 문서 ** 대신 **을 사용하여 데이터를 저장할 수 있다고 가정해야합니다. 나는. 데이터 저장소의 유일한 이점은 10,000 개의 제한이라는 것을 이해해야합니까? 그렇지 않으면 Search API Documents가 데이터 저장소에서 수행 할 수있는 모든 작업을 수행 할 수 있습니까? –

+1

데이터 저장소가 여전히 필요합니다. 여기서 책 ID/ISBN, 저자, 가격, 카테고리 등의 데이터를 저장합니다. Search API를 사용하여 책 제목 및 리뷰를 저장할 수 있지만 데이터 저장소의 항목에 이러한 레코드를 연결해야합니다. –

15

일부 기타 정보 :

  1. 데이터 스토어는 많은 사용 사례에 중요한 트랜잭션 시스템입니다. 검색 API가 아닙니다. 예를 들어, 단일 트랜잭션에서 검색 색인을 넣고 삭제하고 문서화 할 수 없습니다.
  2. 데이터 저장소는 Cassandra와 같은 NoSql DB와 공통점이 많지만 검색 API는 Lucene과 매우 유사한 텍스트 검색 엔진입니다. 역 색인이 어떻게 작동하는지 이해하면 검색 API의 작동 방식을 더 잘 이해할 수 있습니다.
  3. 데이터 저장소 API와 검색 API의 사용을 결합하는 가장 좋은 이유는 데이터 저장소가 검색 API가 매우 쉽게 처리하는 일부 유형의 쿼리 (예 : 무료 텍스트 쿼리, 지형 공간 쿼리)를 수행하는 것을 매우 어렵게 만듭니다. 따라서 데이터 저장소에 기본 엔터티를 저장할 수 있지만 데이터 저장소에서 허용하지 않는 방식으로 검색해야하는 경우 검색 API를 사용할 수 있습니다. 길 아래로 가면 데이터 저장소와 검색 API가 더 긴밀하게 통합되어 있다면 좋을 것 같습니다. 예를 들어 앱 엔진이 색인 생성 된 텍스트 필드에 대해 자유 텍스트 검색을 수행하도록하여 앱 엔진이 자동으로 검색 문서 인덱스를 자동으로 생성합니다. . 그것은 당신이 추가하거나 검색 API를 사용하여 레코드를 업데이트 할 때, 즉시 변경 사항을 반영하지 않을 수 있음을 의미 https://developers.google.com/appengine/docs/java/search/#Java_Consistency

    : 여기에 언급 한 바와 같이

2

검색 API의 가장 심각한 단점은 최종 일관성이다. 사용자가 책을 업로드하거나 계정 설정을 업데이트하는 경우를 생각해보십시오. 변경 사항이 아직 모든 서버에 적용되지 않았으므로 아무 것도 변경되지 않습니다.

검색 API는 검색에 한 가지 좋은 점이 있습니다. 검색 : 기본적으로 Datastore에서 데이터 검색 엔진 역할을합니다.

내 조언은 사용자가 즉각적인 결과를 기대하는 데이터 저장소에 데이터를 유지하고 검색 API를 사용하여 사용자가 즉각적인 결과를 기대하지 않을 데이터를 검색하는 것입니다.

0

Datastore는 중첩 필터를 수행하는 몇 가지 쿼리 연산자 (=,! =, <) 만 제공하며 여러 부등식이 값 비싸거나 불가능 (시간 초과)되거나 검색 결과가 많은 False Positives을 제공 할 수 있습니다. 토큰 화로 부분 문자열 검색을 할 수 있지만 이것은 엔티티를 부 풀릴 것입니다. 이러한 제한을 극복하는 가장 좋은 방법은 Structured Properties 및/또는 Ancestor Queries을 사용하는 것입니다.

검색 API는 토큰 화 된 데이터에 의존하지 않고 NDB 쿼리보다 빠르고 정확하며 검색 문서에서 전체 텍스트 검색을 실행합니다. 단점은 데이터를 최신 상태로 유지해야한다는 것입니다.

데이터 저장소 (작성, 업데이트, 삭제)를 처리 한 다음이 데이터를 문서로 저장하고 색인을 사용하여 클러스터링하는 기능을 실행 한 다음 검색 API를 사용하여 검색을 실행하십시오.

관련 문제