에 cs.stackexchange 나는에 대해 질문 algebird 가 추상 대수학 패키지를 필요한 이유에 대한 추측, GitHub의에 스칼라 라이브러리.
github 페이지에는 몇 가지 단서가 있습니다.
Bloom 필터, HyperLogLog 및 CountMinSketch와 같은 흥미로운 근사 알고리즘을위한 Monoids 구현. 이를 통해 숫자처럼 복잡한 작업을 생각하고 hadoop 또는 온라인에 추가하여 강력한 통계 및 분석을 생성 할 수 있습니다.
그리고 GitHub 페이지의 다른 부분에서 :
원래 Scalding의 Matrix API의 일부로 개발되었습니다. 여기서 행렬에는 Monoids, Groups 또는 Rings의 요소 인 값이 있습니다. 결과적으로 코드가 Scalding 및 Twitter 내의 다른 프로젝트에서 더 광범위하게 적용되었다는 것이 분명했습니다.
트위터의 오스카 보이 킨 (Oskar Boykin)조차도
주요 대답은 세미 그룹 구조를 활용함으로써 기본 작업을 알지 않고도 올바르게 병렬화되는 시스템을 구축 할 수 있다는 것입니다 (사용자는 유망한 연관성을 나타냄).
Monoid를 사용하면 희소성을 활용할 수 있습니다 (일부 Monoid에서는 거의 모든 값이 0 인 많은 희소 행렬을 처리합니다).
반지를 사용하면 숫자 이외의 것 (때로는 우리가 한 것)에 대해 행렬 곱셈을 할 수 있습니다.
algebird 프로젝트 자체 (문제 내역뿐만 아니라)는 여기에서 무슨 일이 일어나고 있는지 명확하게 설명합니다. 우리는 대규모 데이터 세트 집계를위한 많은 알고리즘을 구축하고 있으며 운영 구조를 활용하여 시스템 측면에서 승리합니다. (일반적으로 1000 개의 노드에서 알고리즘을 생산하려고 할 때 어려움이 있습니다).
Semigroup / Monoid / Group / Ring에 대해 시스템 문제를 한 번 해결 한 다음 Memcache, Hadoop, Storm 등을 생각하지 않고도 알고리즘을 연결할 수 있습니다.
어떻게하다 Bloom filters
/ hyperloglog
/ countminsketch
번호와 같은?
데이터베이스 집계가 단일 구조를 갖는 것은 어떻습니까?
이 monoid는 어떻게 생겼습니까? 그들은 그룹 구조를 가지고 있습니까?
문헌 참조가 도움이 될 것입니다.