2013-02-08 4 views
2

루비 온 레일즈 앱에서는 문서 당 약 300x300 요소의 큰 행렬 (부동 소수점 값, 대부분 다른 값)을 저장해야합니다. 문서를 검색 할 때마다 사용자 정의 계산을 위해 전체 행렬을로드해야합니다. 행렬도 자주 업데이트되므로 (쓰기 성능과 메모리 캐싱도 문제가됩니다).큰 행렬을 레일스 앱에 저장하십시오.

이러한 매트릭스를 저장하는 좋은 방법은 (성능면에서) 무엇입니까? 내 마음에 와서 몇 가지 대안 : 열 row, columnvalue

  1. 테이블입니다. 하지만 (약 90000 세포와 함께) 전체 매트릭스를 가져오고 저장하는 것이 모든 요청에 ​​대해 좋은 생각이 아닐 것으로 생각됩니다 (일부 메모리 캐싱이 도움이 될 것입니다).
  2. 텍스트 필드/열에 직렬화 된 행렬을 저장합니다. 성능 관점에서 비교하는 방법에 대한 아이디어가 있습니까?
  3. 일부 문서 데이터베이스 (예 : 몽고)를 사용하여 문서의 한 필드 안에 전체 행렬을 저장합니다 (2에 비해 이점이 없는지는 확실하지 않음).
+0

의 데이터에 대한 인터페이스를 최적화 제공하는 방법 매트릭스 작업을 위해 R 또는 matlab에 등과 접선하고 무거운 하중을하자 어떻습니까? – fuzzyalej

+0

은 스파 스 데이터가 아니더라도 여기에 약간 비슷한 질문에 대한 답을 제공하므로 모든 데이터가 관련되지는 않습니다. http://stackoverflow.com/a/2599384/178651- 내가 생각하는 트릭은 먼저 저장 방법에 대해 생각하는 것입니다./DB에서 효과적으로 검색하면, Rails에서 얼마나 많은 구문 분석, 비교 등이 필요한지 판단 할 수 있습니다. –

+1

귀하의 필요에 맞는 독특한 시나리오가 주어지면 가장 좋아 보이는 몇 가지 옵션을 사용해 보시기 바랍니다. 나의 첫 번째 생각은 그냥 큰 얼룩으로 저장하는 것입니다 (CSV로 생각하십시오) (옵션 # 2). 하지만 필자는 요구 사항과 같은 것을 저장할 필요가 전혀 없으므로 예측하기 어려울 것입니다. 나는 이것을 위해서 MongoDB를 사용하지 않을 것이다. DB의 다른 기능이 필요한 것처럼 사용자의 설명이 들리지 않습니다. – WiredPrairie

답변

0

온 디맨드 방식의 ACID 준수 스토리지로부터 쓰기 및 검색 성능이 문제가 될 것입니다. 모범 사례로, 여러 서버에 걸쳐 필요할 경우 Memcache를 사용하여 메모리에 행렬을 유지하는 캐시 무거운 전략을 제안합니다. 그런 다음 요청주기를 읽고 쓰고 나중에 쓰기 성능에 대해 신경 쓸 필요가 없으며 (MySQL의 텍스트 필드와 같은) 무엇이든 사용할 수 있습니다. 데이터베이스에서

  • 확인을 사용할 수없는 경우의 사본에 대한 캐시 데이터의, 부하와 캐시를 채 웁니다

    이를 위해, 나는 다음을 수행합니다 사용자 정의 매트릭스 클래스를 작성하는 게 좋을 것 .

  • 캐시 복사본이 업데이트되면 비동기 적으로 데이터베이스에 씁니다.
  • 는 코드
관련 문제