2009-03-02 3 views
3

i4o 또는 PLINQ에 대한 경험이있는 사람에게는 질문이 있습니다. 쿼리 할 필요가있는 큰 개체 컬렉션 (약 400K)이 있습니다. 이 논리는 매우 간단하고 직설적입니다. 예를 들어, Person 객체 컬렉션이 있습니다. 동일한 firstName, lastName, datebirth 또는 FirstName/lastname 등의 첫 번째 이니셜과 일치하는 사람을 찾아야합니다. LINQ to Object를 사용하는 것은 시간이 많이 걸리는 프로세스 일뿐입니다.큰 컬렉션의 경우 i4o와 PLINQ 비교

이 궁금 경우 i4o (http://www.codeplex.com/i4o)

또는 PLINQ 쿼리 성능 향상에 도움이 될 수 있습니다. 어느 것이 더 낫습니까? 그리고 거기에 접근법이 있다면.

감사합니다.

답변

5

400k 개체를 사용하면 데이터베이스가 처리 중이든 아니든간에 더 적절한 대답이 아니 었는지 궁금합니다. 그런 다음 색인 작성 프로세스를 추상화합니다. 특히 모든 데이터베이스는 서로 다른 열에 여러 개의 다른 인덱스를 지원하므로 쿼리 최적화 프로그램에서 각 쿼리를 개별적으로 코딩 할 필요없이 모두 지원할 수 있습니다 (쿼리 최적화 프로그램에서 걱정할 필요가 없습니다).

메모리 내 작업이 유효 할 수도 있지만 바닐라 .NET을 사용하면 더 많은 수동 인덱스 관리가 필요할 수 있습니다. 그것의 소리에 의해, i4o는 확실히 조사할만한 가치가있을 것이지만, 나는 기존 비교 데이터를 가지고 있지 않습니다.

+0

고맙습니다. 마크! 몇 가지 규칙에 따라 서로 400K 개체를 일치시켜야하기 때문입니다. 원래 게시물의 예에서 "John Smith"에 대한 레코드와 일치하는 것을 찾아야합니다. 그것은 "J 스미스"또는 "존 S"또는 일치하는 이름 soundex, 등 수 있습니다 ... –

+0

오른쪽 ... 모두 TSQL에서 할 수있는 ... –

+0

나는 성 및 이름이 될 것이라고 가정합니다. 별도로 ... 그래서 당신은 =, LIKE, SOUNDEX 등을 포함하는 다양한 옵션을 가지고 있습니다. –

0

저는 i4o를 사용하지 않았지만 PLINQ를 사용했습니다.

개선하고자하는 쿼리에 대해 잘 모르는 경우 어떤 쿼리가 도움이되는지 말하기가 어렵습니다.

PLINQ는 적용 가능한 곳에서 쿼리의 다중 처리를 허용합니다. 그러나 병렬 처리가 도움이되지 않는 경우가 있습니다.

i4o는 색인 생성에 도움이되는 것처럼 보이므로 일부 통화의 속도는 빨라지지만 다른 통화는 속도가 향상되지 않습니다.

결론은 실행되는 쿼리에 따라 다릅니다.

3

i4o : 오래된 관계형 데이터베이스 요일과 같은 색인을 사용하여 linq를 사용하여 쿼리 속도를 높이기위한 것입니다.

PLinq : 여분의 CPU 코어를 사용하여 쿼리를 병렬 처리합니다.

하드웨어에 따라 성능이 목표 인 경우, i4o로 이동하면 성능이 향상됩니다.