문제

예를 들어,Google App Engine 용 데이터 저장소하지 않는 기준은 데이터베이스,데이터를 저장합니다.누군가가 있는 것에 대한 도움말을 사용하여 Google 데이터 저장소 대신 데이터베이스?고 훈련되 내 마음이 생각하는 100%에서 객체 관계는 직접 지도하는 테이블의 구조,그리고 지금 어렵게 아무것도 보이 다릅니다.내가 이해할 수 있는 혜택의 일부를 Google 의 데이터 저장소에(예를들면성능 및 능력을 배포 데이터),그러나 몇 가지 좋은 데이터베이스 기능을 희생(예:인).

는 사람과 함께 일했 Google 데이터 저장소 또는 BigTable 어떤 좋은 조언을 작동하는 사람들입니까?

도움이 되었습니까?

해결책

거기에는 두 가지 주요 것들을 사용 응용 프로그램에 대한 엔진 데이터 저장소와 비교할 때 도전적인 관계형 데이터베이스:

  • 데이터 저장소이 구분하지 않는 삽입 업데이트됩니다.를 호출할 경우를 넣어()엔티티에 대한 즉 엔터티를 저장하는 데이터 저장소와 독특한 키,아무것도 있는 열쇠 덮어 쓰기.기본적으로,각각의 엔티티에서 데이터 저장소와 같은 역할을 거대한 지도나 정렬된 목록입니다.
  • 를 쿼리하는,당신이 언급은 훨씬 더 제한됩니다.아무 조인을 위해 시작합니다.

키 것을 깨닫고는 뒤에 이유는 모두 이러한 차이는 Bigtable 기본적으로 같은 역할을 거대한 주문한 사전입니다.따라서,put 작업이 간단한 문구를 보일지 여부를 설정한 값을 지정된 키에 대해 관계없이 모든 이 키에 대한 값을 가지며,인출 작업은 제한을 가져오는 하나의 키 또는 연속된 범위의 키를 사용합니다.더 정교한 쿼리를 가능하게 한 인덱스는 기본적으로 테이블,자신의할 수 있도록 구현하는 더 복잡한 쿼리로 검색에 인접한 범위입니다.

면 흡수되는,당신은 기본적인 지식을 이해하는 데 필요한 기능과 한계의 데이터 저장소.제한 사항이 있을 수 있는 듯 임의 아마 자세히 의미합니다.

여기서 중요한 것은 있지만 이러한 제한을 통해 무엇을 할 수 있는 관계형 데이터베이스에서,이와 같은 제한을 만드는 무엇인가 그것이 실용적인 확장을 종류의 크기는 Bigtable 를 처리할 수 있도록 설계되었습니다.당신은 단순히 실행할 수 없는 종류의 쿼리에 잘 보이는 종이지만 atrociously 느린에서 SQL 데이터베이스가 있습니다.

에서의 약관을 변경하는 방법 당신이 어떻게 데이터를 나타내고,가장 중요한 것은 precalculation.대신 조인에서 쿼리 시간 미리 계산 데이터 저장에서 데이터 저장소 어디서나 가능합니다.선택하려면 임의의 기록,임의의 번호를 생성 및 저장 서로 기록합니다. 가의 요리책 이러한 종류의 팁과 트릭 편집:이 책은 더 이상에 존재입니다.

다른 팁

방법 왔다가 마음에 관하여 스위치가 잊지에 대한 데이터베이스에 모두 있습니다.

에 관계 db 세계 당신은 항상 당신에 대해 걱정할 정상화 데이터와 테이블의 구조입니다.도랑습니다.그냥 레이아웃 웹 페이지입니다.그들 모두 누니다.지금 그 아이들을 보십시오.당신은 이미 2/3 다.

를 잊어버린 경우에는 개념는 데이터베이스 크기 사항과 데이터 수 없 복제 당신은 3/4 거기 당신도 없었 코드를 작성!당신의 견해를 지시하신 모델입니다.당신이 없을 개체 및 그들에게 2 차원을 더 이상으로 관계형 세계입니다.저장할 수 있는 물체 모양으로 지금이다.

예,이것은 간단한 설명의 시련,하지만 그것이 나를 도왔을 잊지에 대한 데이터베이스 및 그 응용 프로그램을 만들.내가 만든 4 용 엔진 앱까지 이것을 사용하는 철학과 많은 올 수 있습니다.

나는 항상 웃을 때 사람들이 밖으로-그것은 관계.내가 쓴 cellectr 에서 장고 그리고 여기의 조각을 내 모델다.당신이 볼 수 있듯이 나는 리그를 관리하는 또는 감독을 위해 사용 됩니다.I 할 수 있는 리그에서 모두 관리자,또는에서 특정 사용자가 반환할 수 있는 리그에 그녀는 코치 또는 관리자입니다.

그냥 없기 때문에 특정 외국인 핵심이 지원하지 않는 것을 의미할 수 없는 데이터베이스 모델과 관계입니다.

내 두 개의 펜스.


class League(BaseModel):
    name = db.StringProperty()    
    managers = db.ListProperty(db.Key) #all the users who can view/edit this league
    coaches = db.ListProperty(db.Key) #all the users who are able to view this league

    def get_managers(self):
        # This returns the models themselves, not just the keys that are stored in teams
        return UserPrefs.get(self.managers)

    def get_coaches(self):
        # This returns the models themselves, not just the keys that are stored in teams
        return UserPrefs.get(self.coaches)      

    def __str__(self):
        return self.name

    # Need to delete all the associated games, teams and players
    def delete(self):
        for player in self.leagues_players:
            player.delete()
        for game in self.leagues_games:
            game.delete()
        for team in self.leagues_teams:
            team.delete()            
        super(League, self).delete()

class UserPrefs(db.Model):
    user = db.UserProperty()
    league_ref = db.ReferenceProperty(reference_class=League,
                            collection_name='users') #league the users are managing

    def __str__(self):
        return self.user.nickname

    # many-to-many relationship, a user can coach many leagues, a league can be
    # coached by many users
    @property
    def managing(self):
        return League.gql('WHERE managers = :1', self.key())

    @property
    def coaching(self):
        return League.gql('WHERE coaches = :1', self.key())

    # remove all references to me when I'm deleted
    def delete(self):
        for manager in self.managing:
            manager.managers.remove(self.key())
            manager.put()
        for coach in self.managing:
            coach.coaches.remove(self.key())
            coaches.put()            
        super(UserPrefs, self).delete()    

에서 왔는지 관계형 데이터베이스를 이 데이터 저장소 것입니다.그것은 몇 일했을 얻을 끊습니다.만 몇 가지의 결과입니다.

어야 합니다 이미 알고있는 데이터 저장소를 확장하고 있는 것에서 분리하는 RDMBS.을 규모와 함께 더 큰 데이터 집합,앱은 일부 변경(일부 의미 많은 변화).

RDBMS 대 데이터 저장소
구조
데이터베이스에서,우리는 일반적으로 구조는 우리의 테이블에서 데이터,행에 있는 데이터 저장소이 됩 종류의 엔티티.

관계
에 RDBMS,대부분의 사람들이 folllows 하나하나,다 중 하나로,많은 관계에서,데이터 저장,그것은"없이 결합한"일을 하지만 여전히 우리는 달성할 수 있는 우리 정상화를 사용하"ReferenceProperty"예: One-to-One Relationship 예 .

인덱스
에서 일반적으로 RDMBS 우리는 인덱스는 다음과 같은 기본 키,외국인 핵심,독특한 키와 인덱스 키를 검색 속도 및 향상 우리의 데이터베이스의 성능입니다.데이터 저장소에서,당신은 당신을 만들어야 한 당 인덱스 종류(이동 여부를 당신이 그것을 좋아하지 않)기 때문에 데이터 저장소이 검색 엔터티에 기초하여 이러한 인덱스와 나를 믿는 것은 가장 중요한 부분입니다,에 RDBMS 를 사용하여 검색 할 수 있습니 non-지수 필드지만 시간이 좀 걸릴 것입니다 하지만 그것은 것입니다.데이터 저장소에서 할 수 있지 않을 사용하여 검색 non-인덱스를 제공합니다.

계산
에 RDMBS,그것은 훨씬 쉽게 count(*)하지만 데이터 저장소,주시기 바랍에도 생각하에 그것을 일반적인 방법으로(그래가능)로 1000 제한 고 비용이 많 작 동 로 엔티티가 좋지 않지만 우리는 항상 좋은 선택,우리가 사용할 수 있습니다 분 카운터.

독특한 제약 조건
에 RDMBS,우리는 사랑 이 기능을 옳은가?하지만 데이터 저장소는 그것의 자신의 방법입니다.속성을 정의할 수 없습니다 독특한:(.

쿼리
GAE Datatore 제공하는 훨씬 더 나은 기능이 (Oh no!데이터 저장소이 없 같은 키워드)SQL 는 GQL.

데이터 삽입 업데이트///삭제 선택
이는 우리 모두에 관심이 있으로,RDMBS 우리는 하나 필요에 대한 쿼리를 삽입하고,업데이트하고,삭제를 선택처럼 RDBMS,데이터 저장소이 넣을,삭제하고,얻(말라 너무 흥분)기 때문에 데이터 저장소를 넣어 또는 관점에서의 쓰기,읽기,작은 작업(읽기 비용에 대한 데이터 저장소화 다)및 그게 데이터 모델링을 제공합니다.을 최소화하는 이들 운영 및 유지의 앱 실행됩니다.을 줄이기 위한 읽기 작업 당신이 사용할 수 있는 Memcache.

을 살펴 물건 취급 설명서입니다.첫 번째 의견의 맨 아래에서 페이지를 말한다:

"좋은,하지만 당신이 쓴 이를 설명하는 물건 취급,그것은 또한 하나의 가장 간결한 설명의 애플리케이션 데이터 저장소 자 내가 지금까지 읽습니다.감사합니다."

https://github.com/objectify/objectify/wiki/Concepts

만약 당신이 사용하는지에 대해 생각 ORM-mapped 체는 기본적으로 어떻게 entity-기반 데이터 저장소 같은 Google 의 App Engine 작동합니다.를 위해 뭔가 결합할 수 있습니다 참조 속성.당신이 진짜로 염려할 필요가에 대한 사용할지 여부를 BigTable backend 또는 다른 뭔가가 이후 백엔드 추상화에 의해 GQL 및 데이터 저장소의 API 인터페이스가 있습니다.

내가 보는 방식으로 데이터 저장소이,종류를 식별하는 테이블,per se,엔티티가 개인 내에서 행 테이블.만약 구글이었을 종류보다 단지 하나의 큰 없는 테이블의 구조 및할 수 있는 덤프에서 당신이 원하는 entity.다시 말하면 엔티티에 연결되지 않은 종류는 당신이 어떤 구조로 엔터티 및 저장소 한 위치에서(종류의 파일이 없는 구조물을 그것은 각 라인은 구조물의 자).

이제 다시 원래의 의견,google 데이터 저장소 및 bigtable 은 두 가지 다른 것이므로 혼동하지 마십시오 google 데이터 저장소를 데이터 저장소 데이터 저장식이다.Bigtable 보다 더 비싼 에 맞(주된 이유는 우리는 가지 않았다).에 맞는 적절한 조인 및 RDBMS sql 언어 및 싸게,왜 사용하지 않 에 맞.즉,에 맞는 몇 가지 제한 사항이 크기에 따라 데이터를 수 있는 발생하지 않습니다.

또한,의 관점에서 생각의 점에서 데이터,나는 생각한 적절한 문서"의 관점에서 생각하는 NoSQL 에 데이터베이스".너무 많은 그들의 사용할 수 밖에 이러한 일러 google 제품을 제외하고는 google 클라우드 SQL(는 mySQL)다른 모든 것은 NoSQL.

는 뿌리 데이터베이스에서 세계를 데이터 저장소를 나에게 될 것이라는 거대한 테이블(따라서 이름이"bigtable").BigTable 나쁜 예기 때문에 비록 그것이 다른 것들을 많이 하는 일반적인 데이터베이스하지 않을 수도,그럼에도 불구하고 여전히는 데이터베이스입니다.기회는 당신이 알고하지 않는 한 당신이 무언가를 구축하는 데 필요한 같은 구글의"bigtable",당신은 아마도 미세한 표준은 데이터베이스.그들이 필요로하기 때문에 그것을 처리하는 미량의 데이터 및 시스템을 함께,그리고 아무 상업적으로 사용할 수 있는 시스템 정말 일을 할 수 있습니 정확한할 수 있는 방법을 보여 그들이 필요로 하는 작업을 수행 할 수 있습니다.

(bigtable 참고: http://en.wikipedia.org/wiki/BigTable)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top