영역 데이터베이스 소개

오늘날 우리는 데이터베이스 해결 방안을 선택하기로 결정할 때 많은 선택을 한다.우리는 서로 다른 매력적인 선택을 가지고 있으며, 하나하나가 그것의 장점과 단점을 가지고 있다.나는 그중의 두드러진 것이 분야 데이터베이스라는 것을 발견했다.Realm 데이터베이스는 Android, IOS, React 심지어 Xamarin 개발자가 사용할 수 있습니다.

어떤 영역🤔


오늘날의 대부분의 응용 프로그램은 어떤 지속적인 데이터를 필요로 하는데, 이를 정렬하려면 일반적으로 응용 프로그램을 더욱 복잡하게 하고 더 많은 코드 줄을 추가해야 한다.많은 공사 조직들이 개발의 복잡성 증가로 인한 고통을 잘 알고 있기 때문에 이것은 더욱 긴 주기, 과중한 자원과 서투른 코드 라이브러리를 초래할 수 있다.Realm은 다른 새로운 데이터베이스 솔루션과 함께 이 복잡한 문제를 해결하고 있습니다.
Realm은 응용 프로그램 구조를 간소화하고 강력한 기능을 제공합니다.Realm 플랫폼은 실제로 두 개의 주요 구성 요소로 구성되어 있습니다.영역 데이터베이스와 영역 대상 서버.공식 문서에 따르면 이 두 구성 요소는 협동 작업을 하고 데이터를 자동으로 동기화하며 오프라인 응용에서 복잡한 백엔드 통합에 이르기까지 많은 용례를 지원한다.본고에서 저는 영역 대상 서버를 소개하지 않으려고 합니다. 따라서 영역 대상 서버here에 대한 내용을 더 많이 읽을 수 있습니다.
Realm을 이렇게 특별하게 만드는 관건적인 요소 중 하나는 우리의 현대 모바일 발전 수요를 위해 구축된 것이다. 우리가 사용하는 많은 해결 방안은 실제적으로 휴대전화, 태블릿PC 또는 착용 가능한 장치를 위해 설계된 것이 아니다.

오랫동안 SQLite는 우리가 모바일 기기에서 지속성을 유지하는 주요한 선택이었다. 설령 직접 사용하지 않더라도 많은 라이브러리들이 그것을 사용하여 편리한 포장을 제공한다. 예를 들어 Couchbase Lite, Core Data, ORMLite 등이다.
Realm은 또한 속도를 자랑스럽게 여긴다. 문서에 따르면 Realm은 일반적인 조작에서 심지어 원시 SQLite보다 빠르고 풍부한 기능 집합을 유지했다.



Realm도 쉽게 사용할 수 있습니다. 다음은 기본 Realm 업무의 예시 코드입니다.
Java의 경우:
public class Dog extends RealmObject {
  public String name;
  public int age;
}

Dog dog = new Dog();
dog.name = "Rex";
dog.age = 1;

Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.copyToRealm(dog)
realm.commitTransaction();

RealmResults<Dog> pups = realm.where(Dog.class)
                               .lessThan("age", 2)
                               .findAll();
Swift의 경우:
class Dog: Object {
  @objc dynamic var name = ""
  @objc dynamic var age = 0
}

let dog = Dog()
dog.name = "Rex"
dog.age = 1

let realm = try! Realm()
try! realm.write {
  realm.add(dog)
}

let pups = realm.objects(Dog.self).filter("age < 2")

Javascript의 경우:
class Dog {}

Dog.schema = {
  name: 'Dog',
  properties: {
    name: 'string',
    age: 'int',
  }
};

let realm = new Realm();
realm.write(() => {
  realm.create('Dog', {name: 'Rex', age: 1});
});

let pups = realm.objects('Dog').filtered('age < 2');

Xamarin의 경우:
public class Dog : RealmObject 
{
  public string Name { get; set; }
  public int Age { get; set; }
}

var realm = Realm.GetInstance();
realm.Write(() => 
{
  realm.Add(new Dog
  {
    Name = "Rex",
    Age = 1
  });
});

var pups = realm.All<Dog>().Where(d => d.Age < 2);

입문😁


우리는 영역 데이터베이스를 이용하여 매우 간단한 응용 프로그램을 구축할 것이다.이것은 안드로이드 응용 프로그램이 될 것이다.나는 누구든지 그것과 연결되고 그들이 원하는 어떤 플랫폼에서도 그것을 실현할 수 있도록 그것을 간단하게 할 것이다.
우리가 만들고자 하는 응용 프로그램은 기본적인 데이터베이스 조작만 할 것입니다. 이것은 당신이 사용 분야의 기대를 충족시킬 수 있는 개술일 뿐입니다.
사용자의 이름과 나이를 데이터베이스에 삽입하기 위한 Edittext 보기가 있습니다.다음은 사용자 이름과 나이를 데이터베이스에 삽입하는 추가 단추입니다.데이터베이스에 있는 특정 사용자를 조회하는 필터 단추도 있습니다.

첫걸음🔥


클래스 경로 의존 항목을 프로젝트 레벨 생성에 추가합니다.gradle 파일.
buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'

        classpath "io.realm:realm-gradle-plugin:5.1.0" //todo (1) add realm dependency

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

두 번째 단계🔥


realmandroid 플러그인을 응용 프로그램 레벨 구축의 맨 위에 적용합니다.gradle 파일.
apply plugin: 'com.android.application'

apply plugin: 'realm-android' //todo (2) add realm plugin

android {
    compileSdkVersion 27
    defaultConfig {
...

모델 클래스 정의


RealmObject를 확장하여 모델 클래스를 정의합니다.그것은 너의 매일 POJO 수업과 유사하다.
import io.realm.RealmObject;

//todo (3) Define your model class by extending RealmObject
public class User extends RealmObject{
    private String name;
    private int age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

초기화 영역


시작하려면 영역을 초기화해야 합니다. 프로그램마다 한 번만 초기화해야 하기 때문에 onCreate에서 좋은 곳입니다.
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        //todo (4) Initialize Realm (just once per application)
        Realm.init(this);

        //todo (5) Get a Realm instance for this thread
        Realm realm = Realm.getDefaultInstance();
...

쓰다🔥


이제 모든 것이 준비되었다.다음은 이름과 나이를 가진 새 사용자를 추가하는 것입니다.위의 그림과 같이 추가 버튼을 클릭하여 추가합니다.Edittext 뷰 이름, 나이의 ID는 각각 name\utxt와 age\utxt이고 단추의 ID는 add\ubtn입니다.
   add_btn.setOnClickListener(v -> {
            // write operations in Realm must be wrapped in transactions.
            realm.beginTransaction();
            User user = realm.createObject(User.class); //todo  Create a new object
            user.setName(name_txt.getText().toString()); //todo get user name from Edittext and store in user object
            user.setAge(Integer.valueOf(age_txt.getText().toString())); //todo get user age from Edittext and store in user object
            realm.commitTransaction();
            // commit transaction

            Toast.makeText(this, "User added", Toast.LENGTH_LONG).show();
            clearText();
        });
영역 쓰기 작업을 시작할 때는 트랜잭션에 포장해야 합니다.기본적으로 쓰기 작업이 끝날 때 사무를 제출하거나 취소할 수 있습니다.커밋 사무는 모든 변경 사항을 디스크에 기록합니다.트랜잭션 쓰기를 취소하면 모든 변경 사항이 취소됩니다.
본고의 첫 번째 예시는copyToRealm () 을 사용하여 새로운 대상을 추가하는 것입니다. 이 두 가지 방법은 모두 데이터베이스에 데이터를 삽입합니다.
위의 코드에서, 우리는 단지 Realm Object를 확장하는 사용자 클래스에서 새로운 대상을 만들었을 뿐, 우리는 값을 설정했다. 봐라!우리는 이미 이 데이터들을 삽입했다.나는 당신에게 어떤 추가 코드나 클래스도 숨기지 않았습니다. 이것이 바로 쓰기 작업을 실행하는 데 필요한 전부입니다.

조회🔥


이제 우리는 우리의 귀여운 데이터를 삽입할 수 있다. 다음 문제는 우리가 그것을 어떻게 꺼내는가 하는 것이다🤔.
그래, 데이터를 삽입하는 과정이 멋있어 보인다고 생각한다면, 우리가 그것을 어떻게 검색하는지 보자.만약 당신이 45세 이하의 모든 사용자를 얻고 싶다면 이 조회는 다음과 같다.
        RealmResults<User> result = realm.where(User.class)
                            .lessThan("age", 45)//find all users with age less than 45
                            .findAll();//return all result that reach criteria

이거 좋지 않아요?완료되면 영역 결과를 반복해서 얻을 수 있습니다. 예를 들어 다음과 같습니다.
    StringBuilder stringBuilder = new StringBuilder();
                    for (int i = 0; i < result.size(); i++) {
                        stringBuilder.append(result.get(i).getName() + "  ");
                    }

나는 방금 표면에 닿았는데, 분야가 내가 보여준 것보다 더 많이 할 수 있다는 것은 단지 소개일 뿐이다.조회, 필터, 다중 스레드, 테스트 등에 대한 더 많은 정보는 documentation 를 보십시오.
위의 예제 응용 프로그램의 전체 소스 코드를 여기에서 찾을 수 있습니다.

레무비트 / RealMe 예


간단한 프로젝트는 영역 데이터베이스를 사용하여 안드로이드 개발을 하는 방법을 보여 준다.


RealMe 예


간단한 프로젝트는 영역 데이터베이스를 사용하여 안드로이드 개발을 하는 방법을 보여 준다.
View on GitHub

좋은 웹페이지 즐겨찾기