1

Google App Engine을 처음 사용하고 NDB이고 https://cloud.google.com/appengine/docs/python/gettingstartedpython27/usingdatastore을 공부하고 있습니다.데이터베이스 또는 테이블의 이름은 무엇입니까?

예제가 제대로 작동하지만 지정된 데이터베이스 또는 엔티티 그룹의 이름은 어디에 있습니까? 응용 프로그램이 매번 동일한 데이터베이스를 사용하는 것을 어떻게 알 수 있습니까? 동일한 응용 프로그램을 실행중인 경우 실수로 다른 사용자의 데이터베이스에 쿼리하거나 쓰지 않는 방법은 무엇입니까?

답변

2

App Engine의 모든 애플리케이션은 동일한 데이터 저장소를 사용하지만 각 애플리케이션은 자체 엔티티에만 액세스 할 수 있습니다. 따라서 데이터베이스 이름이 필요 없습니다.

앱의 모든 인스턴스는 앱이 만든 데이터 저장소의 모든 항목에 액세스 할 수 있습니다. 앱 개발자는 사용자 ID 또는 사용자 역할을 기반으로 다양한 액세스 제한을 구현할 수 있습니다. 예를 들어 인증 된 각 사용자는 자신의 메시지 만 읽을 수 있고 인증되지 않은 사용자는 메시지에 전혀 액세스 할 수 없도록하거나 시스템 관리자 역할을 가진 사용자가 다른 사용자와 메시지를 삭제할 수 있도록 설정할 수 있습니다.

앱이 여러 고객을 대상으로하고 데이터를 분리하여 보관하려는 경우 Multitenancy을 사용할 수 있습니다. 하지만 대부분의 경우 편리함과 코드 실수로 인한 실수를 방지하기 위해 수행됩니다. 데이터 모델 및 쿼리에서 고객 ID를 사용하면 동일한 효과를 얻을 수 있습니다.

+0

내 데이터베이스를 식별 할 수 있습니까? 이 데모 앱에서 방명록 로그인 데이터베이스를 구축했다면이 데이터베이스를 쿼리하기 위해 완전히 다른 별도의 웹 애플리케이션을 어떻게 만들 수 있습니까? –

+0

을 사용하면 하나의 응용 프로그램 데이터 저장소에 다른 응용 프로그램에 대한 액세스 권한을 부여 할 수 있습니다. –

+0

두 번째 응용 프로그램은 첫 번째 응용 프로그램에서 인증 된 사용자로 작동 할 수 있습니다. 앱 간 통신 방법 선택은 사용 사례에 따라 다릅니다. 널리 사용되는 방법은이 앱에 RESTful API를 사용하여 서로 이야기하는 것입니다. 이렇게하면 한 앱이 다른 앱의 변경 사항에 덜 의존하게됩니다. –

0

데이터 저장소 종류는 관계형 데이터베이스의 테이블과 유사합니다. NDB에서는 각 모델이 Kind에 해당하며 기본적으로 Kind의 이름은 정의한 Model 하위 클래스의 이름입니다. 이 예에서는 "인사말"이라고 말합니다.

엔티티 그룹은 모델의 생성자에 대한 부모 매개 변수를 사용하여 지정됩니다. 참조한 예에서 부모는 Greeting 생성자에 전달 된 것을 볼 수 있습니다.

App Engine 내에서 각 애플리케이션은 본질적으로 자체 Datastore를 가지므로 환경을 지정하지 않아도됩니다.

+0

사실, 데이터 저장소가 관계형이 아니기 때문에 일종의 테이블이라고 생각하지 않는 것이 좋습니다. "관계형 동등성"을 생각하면 HRD 환경으로 전환하는 것처럼 보일뿐입니다. – Patrice

+0

@Peter McKenzie : guestbook_key (guestbook_name)을 출력하고 일부 GUID를 예상했지만 문자열이 있습니다. Key ('Guestbook', 'default_guestbook') –

+0

Patrice : 충분합니다. 너무 비싸지 않으면 비유가 유용하다고 생각합니다. Old Geezer : 해당 키에서 id() 메서드를 호출 해보십시오. –