2013-06-14 5 views
1

테이블의 여러 행과 달리 직렬화 된 형식으로 많은 양의 데이터를 저장하는 것과 관련된 질문이 있습니다.여러 행에 데이터를 저장하고 MySQL에 직렬화 된 데이터를 저장하는 경우

내 테이블에 내 앱 사용자의 Facebook 친구, 즉 Facebook 사용자 ID, 이름, 생년월일에 대한 특정 프로필 관련 정보를 저장합니다. 각 친구에 대해 테이블에 여러 행을 만듭니다. 예를 들어 내 App 사용자 중 한 명이 5,000 명의 Facebook 친구가있는 경우 테이블에 5000 개의 행을 삽입합니다. 친구의 모든 데이터를 하나의 열에 직렬 형식으로 저장하는 것이 더 좋을까요? 나는 이러한 필드를 개별적으로 검색하거나 정렬하지 않으며이 열에 여러 조인을 사용하지 않습니다. 또한이 열은 누군가가 실제 Facebook 프로필 정보를 변경할 때만 매우 드물게 업데이트됩니다.

PHP를 serialize/unserialize 함수를 사용하여 특정 사용자의 전체 Friends 배열을 직렬화하고 모든 데이터를 단일 열에 저장할 수 있는지 궁금합니다. 그러면이 테이블을 사용하여 테이블을 최적화하고 응답 시간을 단축 할 수 있습니까?

답변

0

당신이 말했듯이 데이터를 검색 할 필요가 없으면 데이터를 serialize하는 것이 좋을 수도 있지만 이것은 응용 프로그램의 느린 프로세스 일 수 있습니다. 여기에 제안, 평가, 예제가 있습니다. 균질하지 않은 데이터가 있고, 데이터가 검색되지 않고 여분의 테이블에있는 경우 데이터의 제어가 손실 될 수 있음을 의미합니다. 그런 다음 데이터를 직렬화하고 처리하기를 선호합니다. 사용자는 분명합니다.

1

MySQL에서는 각 값에 대해 별도의 열이있는 별도의 행이 절대적으로 확실한 방법입니다. 이렇게하면 인덱스가없는 경우에도 이러한 열에 인덱스를 만들 수있을뿐만 아니라 값으로 인덱스를 더 쉽게 쿼리 할 수 ​​있습니다.

그러나 PostgreSQL에서는 (json_encode을 통해) 직렬화 된 값을 JSON에 직렬로 저장하고 그 안에 별도의 값을 색인 할 수 있습니다.

그러나 어느 방법 으로든 모든 친구 레코드는 테이블의 별도 행에 저장해야합니다. 5000 레코드 배열의 serialize 된 값을 데이터베이스에 덤프하고 하루 만 호출 할 수있는 것처럼 아닙니다.

+0

글쎄, 나는이 특정 테이블에 현재 1 천만 개가 넘는 행을 가지고있다. 직렬화 된 친구 배열을 덤프하기 위해 "mediumtext"를 사용하려고했습니다. 내가 가져 오는 모든 컬럼에 대해 색인을 생성했지만, 응답 시간은 여전히 ​​느립니다. 두 가지 접근 방식 모두를 벤치마킹 할 수있는 방법이 있습니까? – Joan

관련 문제