나는 스스로 프로그래밍 (java..mostly 여기에서 질문을 읽는 것으로부터 많다.)하고 내 프로그램은 작동하지만 나는 그들이 할 수있는 한 빨리 그 것인지 확신하지 못한다. 내 응용 프로그램을 프로파일 링하기 시작했고 모든 프로그램에서 큰 추세는 다른 서비스 (대기열 서버, 데이터베이스 서버 등)에 데이터를 연결/끌어 오기/보내는 것 (일반적으로 프로그램의 40 % 이상이 연결 관련 작업에 사용됩니다)입니다.많은 연결을 위해 프로그램을 설계하는 방법은 무엇입니까?
사람들이이 문제를 없애기 위해 따르는 디자인 패턴이나 구조가 있습니까? 데이터베이스에서 데이터를 가져 와서 결과 (예 : result + 1)를 수행하고 다시 전송하는 간단한 문제가있는 경우 어떻게 프로그램을 구조화하면 대부분의 시간이 데이터 처리에 소비됩니까? 그 자체? 데이타의 폴링이 복잡해지면 잘해야한다는 것을 이해합니다.하지만이 작업을 대규모로 수행하고 데이터베이스/대기열 서버에서 많은 간단한 작업을 수행해야하는 경우 어떻게해야합니까?
이것은 잠시 동안 귀찮았습니다. 따라서 스레드를 사용하는 방법을 배웠고 동시에 데이터를 보낼 준비가 된 스레드 설문을 만들었습니다 (그래서 내 프로그램이 승인을 기다리고 있지 않음). 그러나 나는 보일 수 없습니다. 프로그램에서 데이터를 처리 할 때 CPU가 처리 할 수있는 것보다 빠른 속도로 새 데이터를 폴링 할 수 없으므로 데이터 유입을 향상시키는 방법을 알아 내야합니다. 또한 각 요청마다 연결/채널을 다시 열지 않았 음을 확인했지만 시간이 오래 걸립니다.
나는 이것이 일반적인 문제이며 누군가 내 프로그램 (선호하는 자바)을 디자인하는 법을 배울 수있는 자원을 가리킬 수 있다면 고맙겠습니다. 그렇게 큰 부분은 연결에 지출되지 않습니다./서비스 api는 데이터를 얻습니다. 나는 일반적인 포인터를 찾고 어떤 예제도 좋을 것이다. 질문이 너무 일반적이고 코드 샘플을 사용하여 쉽게 문제를 재현 할 수 있는지 알려주십시오.
감사 드리며 잘 설명해 드리겠습니다.
ORM/JPA 프레임 워크, 연결 풀링, 캐시 등을 사용하고 있습니까? – mrab
질문은 본질적으로 "어떻게 대기 시간을 효과적으로 처리합니까?" 그것은 업계에서 열린 질문입니다. 거기에 슬램 덩크 분명히 올바른 해결책입니다. 개발자가 이러한 문제를 해결하는 데 도움이되는 언어와 프레임 워크에 임베드해야하는 추상화 집합을 결정하는 것은 매우 어렵습니다. 우리는 coroutines의 형태를 일급 언어 기능으로 만들어 C#과 VB에서 그렇게하려고 시도하고 있지만, 이것이 가능한 유일한 해결책은 아닙니다. –
클라이언트가 데이터베이스보다 강력 할 수도 있고, 사용자 측에서 조정하지 않고 데이터를 처리 할 수있는 속도보다 더 빠르게 데이터를 제공 할 수도 없습니다. – Affe