기억상실증
Mnesia| 원본 작성자 | 조 암스트롱, 로버트 버딩, 댄 거드먼즈슨 등 |
|---|---|
| 개발자 | 에릭슨 |
| 안정적 해제 | 4.15.4 / 2018년 6월 19일 |
| 기록 위치 | 얼랑 |
| 운영 체제 | 크로스 플랫폼 |
| 플랫폼 | 크로스 플랫폼 |
| 유형 | 관계성 데이터베이스 관리 시스템 |
| 면허증 | Apache License 2.0(OTP 18.0 이후) |
| 웹사이트 | www |
Memnese는 Erlang 프로그래밍 언어로 작성된 분산된 부드러운 실시간 데이터베이스 관리 시스템이다.[1]오픈 텔레콤 플랫폼의 일부로 배포된다.
설명
에를랑과 마찬가지로, 엠네지아는 에릭슨에 의해 통신과 관련된 소프트 실시간 분산 및 고가용성 컴퓨팅 작업을 위해 개발되었다.일반 사무소 기반의 데이터 처리 데이터베이스 관리 시스템으로 의도된 것도 아니고, SQL 기반의 시스템을 대체하려는 것도 아니었다.대신 Mngenese는 DBMS와 같은 지속성이 요구되는 Erlang을 지원하기 위해 존재한다.[2]어떤 SQL 데이터베이스 서버보다 버클리 DB와 같은 내장형 DBMS와 공통점이 더 많다.
데이터베이스 모델
표의 "행"은 키 값과 데이터 필드를 포함하는 레코드로 표시된다.이 데이터 필드는 복잡한 Erlang 데이터 구조를 포함하는 튜플이 될 수 있다.
백엔드 유형
Memnese는 세 가지 내장 테이블 타입이 있다: ram_copies, disc_copies, disc_only_copies.
램_코피
데이터는 메모리에 저장되고 테이블 크기는 가용 메모리에 의해 제한되며 ETS(erlang term storage) 테이블로 백업된다.
디스크_복사
데이터는 메모리에 저장되지만 disk_log로 백업되는 디스크에도 유지된다.디스크_복사는 R7B-4가 출시되면서 2001년 9월 30일까지 데츠 테이블에 의해 지원되었다.[3]
디스크_only_copies
데이터는 디스크에만 저장되며 Dets(ETS의 디스크 버전)에 의해 백업된다.[4]dets 파일 형식은 파일 오프셋에 서명된 32비트 정수를 사용하며, 2GB의 제한이 있으므로 disk_only_copies도 마찬가지다.[3]
백엔드 플러그인
데츠에 의해 부과된 한계 때문에, 다른 백엔드 플러그인에 대한 지원은 울프[5] 위거에 의해 제안되었고, 이것들은 Mesnese에 추가되었다.Klarna는 LevelDB 백엔드 플러그인을[6], Aeternity는 RocksDB 백엔드 플러그인을 추가했다.[7]
관계형 기능
데이터베이스 모델은 관계성이 있지만 SQL에 익숙한 사람이 기대할 수 있는 것은 아니다.데이터베이스에는 테이블이 포함되어 있다.그들 사이의 관계는 다른 표로 모델링된다.[8]
데이터베이스는 아직 실행 중일 뿐만 아니라 쓰기 작업이 진행 중일 때에도 테이블이 스키마 내에서 재구성되고 노드 간에 재배치될 수 있다는 것이 Mesnese의 고가용성 접근법의 핵심 특징이다.
코딩
Mesnese의 질의어는 SQL이 아니라 Erlang 그 자체다.[9]개발자가 응용 프로그램 전반에 걸쳐 단일 언어를 활용할 수 있도록 해 거래 내용을 에를랑의 자연스러운 특징으로 쉽게 표현할 수 있도록 했다.
트랜잭션
얼랑은 기능 언어다.Memnese는 AIDTransaction 지원을 얻기 위해 이것을 기반으로 한다.트랜잭션으로 실행되는 기능 블록은 기능 객체(또는 Fun)[10]라고 불리는 흔한 Erlang 구조로, 단일 Mesnese 문장으로 호출된다.mnesia:transaction(F). 이렇게 하면 쌍을 이룬 소스 코드보다 더 명확한 소스 코드가 생성될 수 있음BEGIN/COMMITSQL 구문. 따라서 절차 내에서 비공개 트랜잭션의 문제를 방지한다.
다시 Erlang의 기능적 특성의 결과로서, 내포 거래는 간단하다.여러 노드(즉, 별도 서버)에 걸쳐 트랜잭션을 분산시키는 것도 가능하다.이런 식으로 트랜잭션을 사용하는 의미론은 일관성이 유지돼 어느 맥락에서나 동일하게 작동하는 라이브러리 코드를 쉽게 작성할 수 있다.
기억상실증에 대한 일반적인 코딩 스타일은 항상 거래를 사용할 것이다.성능상의 이유로, 거래를 회피하는 의도적인 「더러운 작업」도 지원한다.이것은 AID의 원자성과 고립성을 손상시키지만 약 10배 이상의 처리량을 제공한다.[11]또한 인메모리 대체품도 있지만, AID의 내구성 특성은 상실한다.
효율적인 실행
기억상실증은 LYME 웹 애플리케이션 스택의 일부를 형성한다.이것은 LAMP와 비슷하지만 Erlang을 기반으로 한다.Erlang에서의 구현은 애플리케이션 전체에서 단일 가상 머신을 사용하기 때문에 효율성 이점을 제한한다.LYME는 Yaws 웹 서버도 Erlang에서 구현되기 때문에 이것을 이용한다.
주소 공간은 (안전하지만 Erlang 하에서는) Mesnese의 테이블 데이터를 포함하여 코드와 데이터 사이에서 공유된다.[1][12]
출처 및 라이센스
Memnese와 Erlang은 에릭슨 컴퓨터 과학 연구소에 의해 개발되었다.그것들은 오픈 소스 소프트웨어로 출시되었다.Memnese는 Mozilla Public License의 파생상품으로 출시된다.[13]OTP 18.0부터는 오픈 소스 Apache License 2.0에 따라 발행된다.OTP 18.0 이전 버전은 오픈 소스 Erlang Public License에 따라 발행되었다.[14]
이자버드
또한, Memnese는 Erlang에 기반을 둔 Jabber 데몬, ejabberd 에 내재된 옵션이다.[15]
참고 항목
참조
- ^ a b Håkan Mattsson; Hans Nilsson; Claes Wikstrom (1999). "Mnesia - A Distributed Robust DBMS for Telecommunications Applications" (PDF).
- ^ "Purpose of Mnesia". Open-source Erlang project.
- ^ a b "Erlang -- Mnesia Database Questions". www.erlang.org. Retrieved 2021-11-05.
- ^ "Erlang -- Mnesia Reference Manual". www.erlang.org. Retrieved 2021-11-05.
- ^ mnesia_rocksdb, æternity, 2021-10-18, retrieved 2021-11-05
- ^ mnesia_eleveldb, Klarna AB, 2021-11-03, retrieved 2021-11-05
- ^ mnesia_rocksdb, æternity, 2021-10-18, retrieved 2021-11-05
- ^ "Mnesia Getting Started guide". Open-source Erlang project.
- ^ "Mnesia Reference Manual (v 4.4.5)". Open-source Erlang project.
- ^ "6.17 Fun Expressions". Open-source Erlang project.
- ^ Gavin Terrill (20 August 2007). "Erlang's Mnesia - a distributed DBMS for highly scalable apps". InfoQ.
- ^ "Mnesia performance basics". Archived from the original on 2012-12-02. Retrieved 2008-09-25.
- ^ "About Erlang". Open-source Erlang project.
- ^ "Erlang Public License, V 1.1". Open-source Erlang project.
- ^ "ejabberd project homepage".