스트림을 사용하니까 기존의 RDBMS방식을 버려야 한다
No(=Not Only)sql database이면서 In Memory database
- JSON을 받아와서 시리얼라이즈 후 DB에 저장되는 이전의 과정을 생략하고 바로 JSON으로 저장하는 방식
term
- annotation == Python의 decorator
- Adapter == crossEntity
dependencies:
hive: ^[version]
hive_flutter: ^[version]
dev_dependencies:
hive_generator: ^[version]
build_runner: ^[version]
hive를 사용하기 위해서는 main.dart에서 초기화가 필수
import 'package:hive_flutter/hive_flutter.dart'; await Hive.initFlutter(); ※ 모바일 앱이 아닌 경우 Hive.initFlutter() 가 아닌 Hive.init()를 사용
hive에서 박스란 NoSQL의 Collection
공식 홈페이지에서의 정의
What are boxes?
All data stored in Hive is organized in boxes. A box can be compared to a table in SQL, but it does not have a structure and can contain anything.
- box는 table과 비슷하지만 구조화되지 않았다는 차이가 있다
- 결론 : box는 데이터를 저장하는 공간이다
await Hive.openBox('myBox');
final box = Hive.box('myBox');
읽기 :
get
쓰기 :put
final box = Hive.box('myBox');
String name = box.get('name');
DateTime birthday = box.get('birthday');
double height = box.get('randomKey', defaultValue: 17.5);
final box = Hive.box('myBox');
box.put('name', 'Paul');
box.put('friends', ['A', 'B', 'C']);
box.put(123, 'test');
box.putAll({'key1': 'value1', 42: 'life'});
기본적으로 List, Map, DateTime, Unit8List 등 주요 타입들을 지원하지만 그 외에 새로운 타입을 원하면 TypeAdapter 를 작성하여 Hive에 등록 해주어야 한다.
import 'package:hive/hive.dart';
part 'person.g.dart';
@HiveType(typeId: 0)
class Person {
@HiveField(0)
String name;
@HiveField(1)
int age;
@HiveField(2)
List<String> friends;
Person(this.name, this.age, this.friends);
}
Default value 기능은 hive: 2.0.4 , hive_generator: 1.1.0 이후 버전부터 사용 가능
flutter packages pub run build_runner build
Hive.registerAdapter(personAdapter());
final person = await Hive.openBox<Person>('person');
person.put('david', Person('david', 20, ['Tom', 'Ben']);
person.put('sandy', Person('sandy', 30, ['david', 'suzan', 'eric']);
create table test (id bigint, price decimal(10,2));
Timestamp : YYYY-MM-DD HH:MM:SS.fffffffff
Date : YYYY-MM-DD(Date 타입은 Date, Timestamp, String으로 변환가능)
create table test (id int, created_dt date, update_dt timestamp);
struct < column : data_type(primitive type), .........>
struct_coumn.column로 참조
create table test1 (id int, name struct<first:string, last:string>);
map_column->name
t[ 'a', 'b','c' ], t[0], t[1]
create table test2(c1 uniontype<int, double, array<string>, struct<age:int, country:string>>);
A or B중 NULL이면 결과 NULL이고 모든 연산의 결과는 숫자
A + B , A-B, A*B...
hive> select 10+10 from test;
A and B, A && B, A OR B, ! A , A IN (v1, v2..), A in (subquery)
A not in (v1, v2..), A not in (subquery), exists (subquery),
not exists (subquery)
A[i], B[key], C.a
select A[2] from test;
select C.a from test;