전 웹 사이트 기사를 저장하고 사용자가 시스템을 통해 기사를 수정할 수있게하는 웹 사이트 콘텐츠 관리 시스템을 만들고 있습니다. 저는 전형적인 SQL Server 개발자이지만 DocumentDB에서이 시스템을 수행 할 수 있을지도 모릅니다.
우리는 C#과 WebAPI를 사용하여 읽기 및 쓰기를 수행합니다. 다른 데이터 액세스 기술을 테스트하여 어떤 것이 더 나은지 알아 봅니다. 나는 Ling, Linq Lambda, SQL 및 Stored Procedure를 시도 해왔다. 이 모든 쿼리 메서드는 Postman을 통해 테스트 할 때 약 600ms에서 700ms 정도 실행되는 것입니다. 예를 들어, 내 테스트 중 하나는 간단합니다. http://localhost:xxxxxx/multilanguage/resources/1, 600ms 이상 걸릴 것입니다. 그것은 단지 1kb의 문서 였고 지금까지는 내 컬렉션에 5 개의 문서가 저장되어 있습니다.
그래서 내가 물어보고 싶은 것은 다음보다 DocumentDB를 쿼리하는 빠른 방법이 있는지 묻는 것입니다. 내가 물어 보는 이유는 이전에 SQL Server에서 비슷한 것을했기 때문입니다. 쿼리 문서가 아니라 관계형 테이블이었습니다. 조인 된 여러 테이블의 저장 프로 시저에서 훨씬 더 복잡한 쿼리는 약 300ms 정도 소요됩니다. 그래서 나는 이것을 할 더 빠른 방법이 있어야한다고 생각합니다.
의견을 보내 주셔서 감사합니다.DocumentDB에 대한 더 나은 데이터 액세스 기술
답변
구현을 찌르기로 변경하면 실제로 서버와 클라이언트 (우편 배달부) 간의 연결 시간을 테스트하기 때문에 동일한 성능을 얻을 수 있습니다.
할 수있는 일이 있지만 DocumentDB 및 다른 NoSQL 솔루션은 표준 SQL Server와 매우 다르게 동작한다는 점을 기억하십시오. 예를 들어 DocumentDB에 사용 가능한 노드와 RAM이 많을수록 전반적으로 성능이 향상됩니다. Azure의 DocumentDB 개발 인스턴스는 생산 인스턴스보다 적은 리소스를 사용하게됩니다. Azure가 스케일링을 처리하므로, 더 많은 데이터를 수행하는 것이 더 효과적 일 것이라는 점을 생각하면됩니다.
즉, 익숙하지 않은 것은 연결 개체를 전체 응용 프로그램에 공유하는 것입니다. 따라서 데이터를 가져올 때마다 시작 페널티를 피할 수 있습니다. Performance Tips 요약 : 대신 HTTPS의
- 를 사용하여 TCP 연결을하는 것은 당신이
- 사용
await client.OpenAsync()
같은 지역에있는 DocumentDB에 - 연결에 일시 중지 첫 번째 요청에 대한 대기 시간을 시작 피할 수있을 때 (경우 염두에 두어야 당신은
- 이 DocumentDB (그것의 스레드) 빠른 액세스를 위해
- 캐시 당신의 SelfLinks에 액세스하기 위해 싱글 톤을 사용하여) 지역에 걸쳐 개최
- 조정 페이지 크기 그쪽으로 너무 사용하려는 데이터 만 가져 오십시오.
커버 인덱스 정책 등이 더 진보할수록 DocumentDB와 다른 NoSQL 데이터베이스는 SQL 데이터베이스와 다르게 동작합니다. 또한 API가 작동하는 방식에 대한 가정이 잘못되었다는 것을 의미합니다. 비슷한 개념을 테스트하고 있는지 확인하십시오. SQL Server 데이터베이스 연결 개체를 사용하면 각 트랜잭션에 대한 개체를 만들거나 처리 할 수 있으므로 연결을 다시 연결 풀로 반환 할 수 있습니다. 동일한 방식으로 DocumentDB를 처리하면 연결 풀을 사용하지 않은 것과 같은 종류의 성능 문제가 발생합니다.
DocumentDB가 처음 나왔을 때 자체 링크를 캐싱하고 있었지만 ID 기반 라우팅을 도입 한 이후로 우리는 클라이언트 측에서 생성하거나 로컬에서 유지하는 ID를 기반으로 ID 기반 라우팅을 작성했습니다. 우리는 ID 기반 라우팅 사용으로 인한 성능 저하를 보지 못했습니다. –
@LarryMaccherone, 나는 ElasticSearch와 더 많은 시간을 보냈습니다. 그래서 셀프 링크로 당신의 말씀을 전하겠습니다. 기본 사항은 NoSQL을 테스트하고 상호 작용하는 방식이 SQL 데이터베이스를 사용하는 방식과 매우 다르다는 것입니다. 한 지역 내의 백본에 매우 높은 대역폭이있어 연결 속도 문제가 훨씬 적습니다. –
안녕하세요. 그것이 의미하는 바에 따르면 질문에 실제로 많은 정보가 없으며 의미있는 대답을 제공 할만큼 충분히 구체적이지 않습니다. "빨리/더 나은 것"과 같은 질문은 [좋은 질문으로 간주되지 않습니다] (http://stackoverflow.com/help/dont-ask)입니다. [* 좋은 질문 *을하는 방법 (http://stackoverflow.com/help/how-to-ask)을 보시고 이에 따라 다시 질문하십시오. – ardila
나는 오랫동안 DocumentDB에 대한 HTTP 호출에 높은 대기 시간을 초래하는 네트워크 경계와 관련된 문제가 있다고 의심 해 왔습니다. 나는 HTTP를 통해서만 대화하는 node.js를 사용한다. 우리 집에서 달릴 때 최소 250ms의 왕복 여행을 볼 수 있습니다. 그러나 Azure는 DocumentDB와 동일한 데이터 센터에서 node.js를 호스팅하며 이러한 호출의 대기 시간은 10ms 이하입니다. 제작 노드 node.js 환경이 Azure 데이터 센터에 있기 때문에 걱정하지 않았습니다. 그것은 우리의 라이브 테스트와 ad-hoc 탐색 작업에만 영향을줍니다. –
. NET 쪽에서는 직접 TCP 연결의 대기 시간이 훨씬 짧다는 것을 알고 있습니다. –