문제

여기에서 사용자 선호도 저장에 관한 몇 가지 질문을 보았지만 대부분 최소한의 선호도 세트를 언급하는 것 같습니다. 저는 현재 고도로 사용자 정의 가능한 웹 앱을 연구하고 있는데,이 웹 앱은 많은 선호도를 저장해야하며 저장하는 방법에 어려움을 겪고 있습니다.

내가 저장할 선호도에는 특정 툴팁 표시를위한 부울, 페이지에 다양한 컨텐츠 패널 배열, 로그인 후 표시 할 페이지, 특정 양식 필드의 기본값 등이 포함됩니다. 각 사용자 마다이 유형의 50 개 이상의 선호도가있을 것으로 예상되며, 데이터는 대부분 부울과 정수입니다.

나는 직렬화의 열렬한 팬이 아니지만 각 선호도를 개별 행으로 저장하는 확장성에 대해 걱정하고 있습니다. 생각?

도움이 되었습니까?

해결책

데이터 덩어리를 직렬화하는 것은 여기에가는 방법이지만 성능의 이유는 아닙니다. 오히려 이것은 많은 변화를 볼 수있는 시스템의 측면이기 때문입니다. 이제 선호도가 일부 페이지 또는 무언가에서 고급 모드를 켤 수 있도록하기 때문에 DB 스키마를 변경하지 않아도됩니다.

HLGEM이 언급 한 엔티티 부여 가치 모델은이를 "쉽게 진화하기 쉬운"관점에서 맞지만 성능이 매우 열악 할 것이라고 말했듯이이를 준수합니다.

직렬화 된 객체로 포기하는 것은 특정 패턴과 일치하는 사용자를 위해 DB를 직접 쿼리 할 수있는 기능입니다 (아마도 설정의 조합으로 만 발생하는 버그를 추적하고 있으며 어떤 것이 있는지 확인하고 싶습니다. 해당 조합을 가진 사용자).

다른 팁

무엇이든 간에이에 대한 엔티티-교도 부사장 구조를 사용하지 않습니다 (http://en.wikipedia.org/wiki/entity-attribute-value_model) 매우 실적이 좋지 않은 시스템을 원하지 않는 한. 50 개의 열이있는 하나의 테이블에 대한 호출은 필요한 모든 정보를 얻으려면 하나의 테이블에 대한 호출보다 훨씬 빠릅니다.

각 일반 기본 설정 그룹 (로그인 기본 설정, 전체 사이트 기본 설정, 특정 페이지 또는 함수 선호도)에 대해 관련 테이블을 만들겠습니다. 기본 설정을 쿼리하려는 방법 (로그인 부사장을 당기는 경우 모든 것을 다시 당기려면 로그인시 전체 사이트에 필요하고 사용자가 그에 맞을 때만 특수 영역에만 필요한 곳에 필요하므로 일부 조합). 이렇게하면 사이트의 각 영역에 필요한 모든 환경 설정은 동일한 테이블 또는 최대 2 개 또는 3 개의 테이블에 있으면 정보를 쉽게 얻을 수 있습니다. 이곳은 디자인이 성능에 중요한 곳이기 때문에 (당신은 항상 선호도를 찾아서 밀리 초에도 계산할 것입니다) 디자인에서 먼저 성능을 고려해야합니다. 여기에서 이것을 객체 지향적 인 것처럼 보이거나 개발자를 설정할 때 더 적은 작업을 만들려는 욕구보다 훨씬 중요합니다.

데이터베이스에 사용자 기본 설정과 같은 정보를 저장하는지 모르겠습니다. 사용자가 로그인하자마자 많은 (전부는 아니지만) 사용자 선호도를보고 싶어하는 것 같습니다. DB 쿼리를 많이하면 시스템이 상당히 느려집니다. 대신, 사용자의 모든 설정을 단일 파일 (또는 어딘가에 단일 레코드)으로 유지하고 사용자가 로그인하자마자 도매를 삼키고 캐싱하는 것이 좋습니다.

사용자 데이터가 이미 데이터베이스에 저장되어 있다고 가정하면 특히 데이터를 기준으로 쿼리를 수행 해야하는 경우 한 행에 모든 문제를 저장하는 데 아무런 문제가 없습니다. 선호도 A 또는 B 등의 모든 사용자를 선택하십시오.

그러나 나는 그것을 수업에로드하고 일종의 캐싱 메커니즘을 통해 해당 클래스를 지속시킬 것입니다.

환경 설정을 검색 할 필요가 없으면 언제든지 환경 설정을 XML로 저장하고 "기본 설정"열에 저장할 수 있습니다. 미래에 새로운 선호도를 조금 더 쉽게 추가해야합니다.)

할 수있는 또 다른 옵션 (예 : 물건에 대한 통계를 확인하기 위해 DB에 저장된 항목이 필요하지 않은 경우 쿠키에 모든 설정을 넣고 저장할 수 있습니다. 기계.

물론 쿠키와 함께 쿠키 사용의 모든 경고가 나옵니다. 하지만 또 다른 아이디어 ...

사용자가 더 많이 선호하는 특정 선호도가 있습니다 (모든 동물은 동일하지만 일부는 다른 동물보다 동일합니다). 이들은 로그인시 인터페이스에서 검색 및 응용 프로그램을 위해 특별히 최적화되어야합니다. 선호도의 깊이가 줄어들면서 어떤 기준을 사용하여 집계 될 수 있으며 배열로 별도의 열로 저장할 수 있습니다 (예 : 글꼴 기본 설정 열에는 글꼴 유형, 크기 및 색상이 포함되며 글꼴 테이블을 나타냅니다). 또한 DB 툴링을 사용하여 중대한 사용 된 열을 색인화하고 집계 된 열을 분할하여 재 설계하여 집계의 어떤 요소가 수요가 많을지 식별 할 수 있습니다.

모든 사용자 선호도에서는 매우 정적 인 경향이 있으며 (즉, 습관과 같습니다), 선호도와 더 많이 변이하는 사용자 데이터를 혼동하지 마십시오.

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