Programing

Datomic은 언제 사용해야합니까?

lottogame 2020. 12. 2. 07:41
반응형

Datomic은 언제 사용해야합니까?


데이터베이스 서비스 Datomic에 흥미가 있지만 제가 작업하는 프로젝트의 요구 사항에 맞는지 확실하지 않습니다. Datomic은 언제 좋은 선택이며 언제 피해야합니까?


Datomic을 프로덕션에 사용하지 않았다는 단서에 답을하겠다고 생각했습니다.

장점

  1. 데이터 로그 쿼리는 강력하고 (비 재귀 SQL보다 더 많음) 매우 표현력이 뛰어납니다.
  2. 쿼리는 Clojure 데이터 구조로 작성할 수 있으며 데이터 구조로 쿼리 할 수있는 많은 SQL 라이브러리처럼 약한 DSL이 아닙니다.
  3. 불변성이므로 Clojure / 다른 언어에서도 불변성이주는 이점을 얻을 수 있습니다. 또한 구조를 저장하면서 데이터베이스에 과거의 모든 사실을 저장할 수 있습니다. 감사 등에 매우 유용합니다.

단점

  1. Datalog는 동등한 SQL보다 느리기 때문에 속도가 느릴 수 있습니다 (동등한 SQL 문을 작성할 수 있다고 가정).
  2. 많이 작성하는 경우 단일 거래자가 압도되는 것에 대해 걱정할 필요가있을 수 있습니다. 이것은 대부분의 경우에있을 것 같지 않지만 생각해 볼 것이 있습니다 (하지만 일종의 샤드를 수행 할 수 있고 자신을 구할 수 있습니다. 그러나 이것은 주식 틱 데이터 저장을위한 DB가 아닙니다).
  3. 시작하고 실행하는 것은 약간 까다 롭고 비용이 많이 들고 라이선스와 가격으로 인해 호스팅 된 인스턴스를 사용하기 어렵습니다. Heroku에서 Postgres와 같은 것을 사용하는 대신 시스템 관리를 직접 처리해야합니다. 또는 MongoHQ의 Mongo

나는 각면에서 일부를 놓치고 있다고 확신하며, 단점 아래에 3 개가 나열되어 있지만 단점이 사용을 방해하지 않는 더 많은 상황에서 장점이 그보다 더 크다고 생각합니다. 가격은 아마도 대부분의 소규모 프로젝트 (1 년 무료 평가판보다 오래 지속될 것으로 예상)에서 사용되는 것을 막을 수있는 것입니다.

Cf. 더 많은 정보를 얻기 위해 Datomic을 설명하는 짧은 게시물 입니다.

표현력 (데이터 로그 참조)과 불변성은 굉장합니다. 이와 관련하여 Dataomic과 함께 작업하는 것은 매우 재미 있으며, 조금만 사용하면 강력하다는 것을 알 수 있습니다.


Datomic이 애플리케이션에 적합한 지 고려할 때 한 가지 중요한 것은 저장하고 쿼리 할 데이터의 모양을 생각하는 것입니다. Datomic 사실은 실제로 RDF 트리플 (+ 1 급 시간 개념)과 매우 유사하므로 자체적으로 제공합니다. 복잡한 관계 (연결된 그래프 데이터)를 모델링하는 데 매우 유용합니다. 기존 SQL 데이터베이스에서는 종종 번거 롭습니다. 저는이 측면이 저에게 가장 매력적이고 중요하다는 것을 알았습니다. 물론 이것이 Datomic에만 국한되지 않더라도 그래프 데이터베이스를위한 다른 고품질 제품이 많기 때문에 Neo4J를 언급해야합니다. JVM 기반 솔루션에 대해 이야기 할 때.
데이터 스키마와 관련하여 유연성과 안정성 사이의 적절한 균형이라고 생각합니다.


위의 답변을 완성하기 위해 불변성과 과거를 기억하는 능력은 감사와 같은 몇 가지 특별한 경우에 적합한 '마법사 기능'이 아니라는 점을 강조하고 싶습니다. 이는 '변이 가능한 셀'데이터베이스 (현재 데이터베이스의 99 %)에 비해 몇 가지 깊은 이점이있는 접근 방식입니다. Stuart Halloway는이 비디오에서이를 잘 보여줍니다. 임피던스 불일치는 우리의 잘못 입니다.

제 개인적인 견해로는이 접근 방식은 개념적으로 근본적으로 더 건전합니다. 몇 달 동안 사용 해본 결과, Datomic이 미친 마법의 정교한 힘을 가지고있는 것이 아니라 다른 사람들이 가지고있는 큰 문제가없는보다 자연스러운 패러다임이 아니라고 생각합니다.

다음은 내가 가치있는 Datomic의 몇 가지 기능이며, 대부분은 불변성에 의해 활성화됩니다.

  1. 읽기는 원격이 아니기 때문에 유선을 통한 탐사처럼 쿼리를 디자인 할 필요가 없습니다. 특히 관심사를 여러 쿼리로 분리 할 수 ​​있습니다 (예 : 내 쿼리에 대한 입력 인 항목 찾기-이러한 항목에 대한 비즈니스 질문에 답하기-결과 표시를위한 관련 데이터 가져 오기).
  2. 스키마는 쿼리 성능을 저하시키지 않고 매우 유연합니다.
  3. 애플리케이션 프로그래밍 언어에 쿼리를 통합하는 것이 편안합니다.
  4. Entity API는 ORM의 좋은 부분을 제공합니다.
  5. 쿼리 언어는 프로그래밍 가능하며 추상화 및 재사용을위한 기본 요소 (규칙, 술어, 데이터베이스 함수)가 있습니다.
  6. 성능 : 작가는 다른 작가 만 방해하고 아무도 독자를 방해하지 않습니다. 또한 많은 캐싱.
  7. ... 그리고 예, 과거로의 여행, 투기 적 글쓰기 또는 현실 분기와 같은 몇 가지 초강대국.

경우에 대해서 하지 Datomic을 사용, 여기에 내가 보는 현재의 제약 및 제한 사항은 다음과 같습니다 :

  1. JVM에 있어야합니다 (REST API도 있지만 대부분의 이점 IMO를 잃게됩니다)
  2. 쓰기 규모 나 대용량 데이터에 적합하지 않음
  3. 특히 프레임 워크에 통합되지 않을 것입니다. 예를 들어 현재 Datomic 스키마에서 CRUD REST 엔드 포인트를 생성하는 라이브러리를 찾을 수 없습니다.
  4. 그것은 상업 데이터베이스입니다
  5. 읽기는 애플리케이션 프로세스 ( '피어')에서 발생하므로 피어가 쿼리에서 트래버스하는 데 필요한 모든 데이터를 보유 할 수있는 충분한 메모리가 있는지 확인해야합니다.

그래서 저의 매우 모호하고 비공식적 인 대답은 Datomic이 쓰기 부하가 합리적이고 라이센스에 문제가 없으며 JVM에있는 대부분의 사소하지 않은 응용 프로그램에 적합하다는 것 입니다.

비유로, 불변성을 기반으로하지 않는 다른 버전 제어 시스템과 비교하여 Git에 대해 동일한 질문을 할 수 있습니다.


다른 답변 위에 잠정적으로 추가하려면 다음을 수행하십시오.

datomic은 다른 모든 현재 옵션의 쿼리 가능한 데이터 저장소에 대해 더 나은 개념적 프레임 워크를 제공하는 동시에 부분적으로 확장 가능하고 예외적으로 성능이 뛰어나지 않다고 말하는 것이 타당합니다.

쿼리가 피어 RAM에 맞아야하거나 실패해야하기 때문에 부분적으로확장 가능 하다고 말합니다 . 그리고 최고 수준의 SQL 엔진은 정교한 실행 계획을 통해 메모리에 맞도록 쿼리를 최적화 할 수 있기 때문에 예외적으로 성능이 좋지는 않습니다. Datomic의 트랜잭션 및 쿼리 분리는 전체적으로이 기능을 상쇄 할 수 있습니다.

그러나 많은 NoSQL 엔진과 달리 트랜잭션은 일류 시민이므로 그 핵심 측면에서 RDBMS 시스템과 동등합니다.

For applications where data is read more than being written, transactions are needed, queries always fit in memory or memory is very cheap, and the overall size of accumulated data isn't too large, it might be a win where a commercial-only product can be afforded ― for those who are willing to embrace its novel conceptual framework implied in the API.

참고URL : https://stackoverflow.com/questions/21245555/when-should-i-use-datomic

반응형