2011-02-04 10 views
4

지금부터 MySQL에서 MongoDB로 전환하는 것을 계획하고 연구 중입니다. 흥미로운 생각이 들었습니다 ... 데이터베이스에 저장해야하는 계층 적 객체가 많이 있습니다. 내 현재의 방법은 컬렉션에 임베디드 문서를 잔뜩 가지고하는 것입니다. 그들은 결코 검색 할 필요가 없습니다. PHP 객체를 직렬화하고 DB에 저장 한 다음 PHP 객체로 다시 직렬화하여 사용하고 싶을 수 있습니까? 대안은 내 ORM으로 Doctrine을 사용하고 있습니다.PHP : 객체를 직렬화하고 나중에 데이터베이스에 저장하는 것이 좋지 않습니까?

프로그래밍의 직관력은 이것이 잘못된 디자인이며 제한적이라고 말하지만 직렬화 및 직렬화 해제는 매우 빠르며 ORM이 필요하지 않습니다.

귀하의 의견은 무엇입니까? 좋은 디자인 또는 나쁜 디자인?

+0

제안 된 문서 중 하나의 예를 들려 줄 수 있습니까? –

+2

이것은 질문의 중요한 부분을 다루지는 않지만 언어가 더 이상적이지 않은 것을 원한다면 PHP의 serialize()보다는 JSON을 직렬화하는 것을 고려하십시오. 또한 독서/디버깅을 위해 인간 친화적입니다. – Schwartzie

+1

내가 누락 된 것이 있습니까? 왜 MongoDB에 문서를 저장하려면 JSON으로 변환하지 않았습니까? –

답변

9
이 나쁜 디자인 간주됩니다 많은 경우에

하지만, 모두가 다음과 같은 경우는 일할 수있는 적용

  1. 당신은
  2. 당신은 받아 들일 수 그들을 검색 할 필요가 없습니다 (잠재적으로) 그들에 조회하는 제한 기능을
  3. 당신은 RDBMS에 의해 강제 관계형 무결성이나 다른 제약 조건이 필요하지 않습니다
  4. 당신은 당신이 다른 언어를 읽을 필요가 없을거야 알고
  5. 클래스 정의를 업데이트 할 때이를 역 직렬화, 버전 화 및 올바르게 마이그레이션하는 방법을 알게 될 것입니다.
  6. PHP 직렬화 형식이 출시 전체에서 안정적 일 것이라고 확신하거나 마이그레이션 코드, 또는 단기 프로젝트 그리고 당신은) 당신은 약간의 성능 저하를 받아 들일 것
  7. 상관 없어 (SELECT + deserialize()SELECT)
+2

이러한 조건들이 모두 파일 시스템에있을 수있는 것처럼 보이는 것 같습니다. –

1

당신이하고자하는 일에 전적으로 달려 있습니다.

항상 각 요청이 처리하는 객체가 같거나 각 요청간에 관계가 없으면 괜찮을 수 있습니다.

  • 당신은 객체 나중에
  • 직렬화 된 객체 종류의 신뢰할 수없는 (정확히 ACID를 준수)
  • 더 고급 뭔가 작업을 수행 할 수 있습니다 :

    는하지만 나에게 단점이 많이있다 직렬화 된 PHP 객체를 읽을 수있는 것은 없으며 대신 다른 것을 사용하고 싶을 수도 있습니다.

0

객체 일렬보다 느린 것입니다 RSS 피드와 같은 항목을 캐시해야 할 때 매우 유용합니다.

내가 그것을 직렬화하는 데 유용하다는 것을 알았지 만, 그 문자열을 처음에는 직렬화하지 않고 문자열로 편집 할 수 없다는 것을 확실히 할 수 있습니다!

3

데이터베이스를 쿼리 할 수없는 이유는 무엇입니까?

관련 문제