문제

나는 현재 db4o(Java 버전)를 시험해 보고 있는데, 내가 보는 것이 꽤 마음에 듭니다.하지만 실제 라이브 (웹) 환경에서 어떻게 작동하는지 궁금하지 않을 수 없습니다.db4o 실행에 대해 공유할 수 있는 경험(좋든 나쁘든)이 있는 사람이 있습니까?

도움이 되었습니까?

해결책

우리는 대규모 클라이언트/서버 프로젝트에서 DB40 .NET 버전을 실행합니다.

우리의 경험에 따르면 일반적인 관계형 데이터베이스보다 잠재적으로 훨씬 더 나은 성능을 얻을 수 있습니다.

그러나 이런 종류의 성능을 얻으려면 실제로 개체를 조정해야 합니다.예를 들어, 많은 개체가 포함된 목록이 있는 경우 이러한 목록의 DB4O 활성화는 느립니다.예를 들어 관계를 역전시키는 등 이 문제를 해결하는 방법에는 여러 가지가 있습니다.

또 다른 고통은 활성화입니다.DB4O에서 개체를 검색하거나 삭제하면 기본적으로 전체 개체 트리가 활성화됩니다.예를 들어, Foo를 로드하면 로드할 항목이 더 이상 남지 않을 때까지 Foo.Bar.Baz.Bat 등이 로드됩니다.이는 프로그래밍 관점에서는 좋지만 개체에 중첩이 많을수록 성능이 저하됩니다.성능을 향상시키기 위해 DB4O에 활성화할 레벨 수를 알려줄 수 있습니다.개체가 많으면 이 작업을 수행하는 데 시간이 많이 걸립니다.

또 다른 어려움은 텍스트 검색이었습니다.DB4O의 텍스트 검색은 SQL 전체 텍스트 인덱싱보다 훨씬 느립니다.(그들은 자신의 사이트에서 이 사실을 직접 알려줄 것입니다.) 좋은 소식은 DB4O 위에 텍스트 검색 엔진을 설정하는 것이 쉽다는 것입니다.우리 프로젝트에서는 원하는 텍스트 필드를 색인화하기 위해 Lucene.NET을 연결했습니다.

데이터베이스 업그레이드를 적용하는 데 유용한 GetField API와 같은 일부 API는 작동하지 않는 것 같습니다.(예를 들어, 속성 이름을 바꾸고 데이터베이스의 기존 개체를 업그레이드하려는 경우 이러한 "반사" API를 사용하여 데이터베이스에서 개체를 찾아야 합니다.[Index] 속성과 같은 다른 API는 안정적인 6.4 버전에서 작동하지 않으며 대신 강력한 형식이 아닌 Configure().Index("someField")를 사용하여 인덱스를 지정해야 합니다.

데이터베이스가 커질수록 성능이 저하되는 것을 목격했습니다.현재 1GB의 데이터베이스가 있고 속도는 여전히 빠르지만 작은 데이터베이스로 시작했을 때만큼 빠르지는 않습니다.

ID가 데이터베이스에 더 이상 존재하지 않는 경우 Db4O.GetByID가 데이터베이스를 닫는 또 다른 문제를 발견했습니다.

우리는 기본 쿼리 구문(쿼리에 대한 가장 자연스럽고 언어 통합된 구문)이 덜 친숙한 SODA 쿼리보다 훨씬 느리다는 것을 발견했습니다.따라서 다음을 입력하는 대신:

// C# syntax for "Find all MyFoos with Bar == 23".
// (Note the Java syntax is more verbose using the Predicate class.)
IList<MyFoo> results = db4o.Query<MyFoo>(input => input.Bar == 23);

멋진 쿼리 코드 대신 문자열 기반이고 강력한 형식이 아닌 보기 흉한 SODA 쿼리를 사용해야 합니다.

.NET 사용자를 위해 최근 최고의 구문을 제공하는 LINQ-to-DB4O 공급자를 도입했습니다.그러나 성능이 추악한 SODA 쿼리와 동등한 수준인지 여부는 아직 확인되지 않았습니다.

DB4O 지원은 괜찮았습니다.우리는 그들과 여러 번 전화 통화를 했고 유용한 정보를 받았습니다.그들의 사용자 포럼은 거의 쓸모가 없지만 거의 모든 질문에 대한 답변이 없습니다.JIRA 버그 추적기는 많은 관심을 받고 있으므로, 잔소리하는 버그가 있는 경우 JIRA에 제출하면 자주 수정될 것입니다.(수정된 버그 2개와 절반 정도 패치된 버그가 있습니다.)

이 모든 것이 당신을 놀라게 하지 않았다면, 우리가 직면한 문제에도 불구하고 DB4O에 매우 만족하고 있다고 말씀드리고 싶습니다.우리가 얻은 성능은 우리가 시도한 일부 O/RM 프레임워크를 압도했습니다.난 그것을 추천 해.

2015년 7월 업데이트 참고로 이 답변은 2008년에 작성되었습니다.공감해주셔서 감사하지만, 그 이후로 세상은 바뀌었고 이 정보는 작성 당시만큼 신뢰할 수 없을 수도 있습니다.

다른 팁

대부분의 기본 쿼리는 백그라운드에서 SODA 쿼리로 효율적으로 변환될 수 있고 변환되므로 별 차이가 없습니다.강력한 유형의 언어 영역에 남아 있기 때문에 NQ를 사용하는 것이 물론 선호됩니다.NQ가 인덱스를 사용하는 데 문제가 있는 경우 언제든지 문제를 게시해 주시기 바랍니다. db4o 포럼 우리는 당신을 도와주려고 노력할 것입니다.

고란

내가 겪은 주요 문제는보고입니다.db4o 데이터 소스에 대해 효율적인 보고서를 실행할 수 있는 방법은 없는 것 같습니다.

유다님, 최신 프로덕션 버전(7.4)의 기능인 투명 활성화를 사용하지 않는 것 같은데요?현재 최신 버전에서 해결된 다른 문제가 있을 수 있으므로 사용 중인 버전을 지정했다면?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top