2010-05-19 3 views
0

사용자가 네트워크 구조를 구축 한 다음 탐색하는 방법에 대해 질문 할 수있는 레일 앱이 있습니다.미리 계산 된 데이터를 Rails 웹 서비스 호출간에 어떻게 공유합니까?

노드와 연결을 추가 할 때 이들은 단지 데이터베이스에 저장됩니다. 네트워크의 쿼리를 작성하면 모든 노드에서 다른 노드까지의 최단 경로를 계산합니다.

메모리에서이 작업을 수행하는 데는 다소 시간이 걸리지 만 문제가 발생하면 즉시 이러한 경로 질문에 대한 답을 얻을 수 있습니다.

질문은 ... 각 요청이 매번 경로 네트워크를 다시 생성하지 않도록이 네트워크를 웹 사이트 호출간에 어떻게 공유합니까?

참고 : 나는 승객을 사용하여 아파치 서버에이를 호스팅하고 (모드 루비)

생각?

+0

전역 변수를 만들려고했는데 아파치가 아니라 몽글에서 작동합니다. –

답변

1

는이 데이터를 memcached를 사용할 수)

라이언 베이츠는 그가 아주 잘 장기적으로 도움이해야하는 데이터베이스 샤딩 마스터 슬레이브 복제를 포함하여 이러한 개념을 설명하는 스크린 캐스트를 가지고? (Rails 캐시 API의 경우 ActiveSupport::Cache::Store 참조).

+0

Jet의 답변에서 답을 발견했습니다.Rails.cache.fetch ("network") {calculate_network}는 결과를 캐시에 넣습니다. 그런 다음 설정 파일에 캐시 메소드를 설정하면 스레드간에 공유 할 수 있습니다. :) 고마워. –

1

37 신호는 XGB에서 mysql/Db 버퍼 크기를 가지며 서버에서 사용할 수있는 ram/flash mem의 양이 많습니다.이 옵션은 모든 선택 항목을 캐시합니다.

+0

계산 된 경로를 데이터베이스에 저장하여 쿼리 할 수 ​​있도록 하시겠습니까? (나는 성능을 위해 데이터베이스 캐시의 모든 것을 메모리에 저장한다고 말하고 있음을 이해한다). 그것은 효과가있을 수 있습니다. 다시 계산할 때마다 새 경로 테이블의 내용을 삭제해야합니다. –

+0

아니요, 오직 캐시에 저장할 수 있습니다. MemCache 또는 DB 캐시 또는 둘 모두의 조합이 될 수 있습니다. 가장 많이 방문한 경로는 데이터베이스에 도달하지 않고 사용할 수 있습니다. –

관련 문제