'update'에 해당되는 글 2건

  1. 2019.12.19 :: Java - CopyOnWriteArraySet 클래스
  2. 2019.09.16 :: DB - MongoDB와 자주 사용되는 SQL 비교

 

크기가 일반적으로 작고 읽기 전용 작업이 변경 작업보다 훨씬 많을 때 사용하면 좋은 라이브러리이다. iteration 중, 스레드 간의 간섭이 없어야 할때 사용하기 좋다. 즉, 스레드 안전하다.

하지만 변경 작업 같은 경우(add, set, remove) snapshot(복제본)을 이용하여 변경작업을 하기 때문에 비용이 비싸다. 내부적으로 object lock, synchronized 등이 사용되기 때문에 읽기 작업이 많고 변경작업이 적은 경우에 사용하는 것이 좋다. 그리고 해당 라이브러리는 iteration 중 remove를 지원하지 않는다.

 

해당 라이브러리가 스레드 안전한 이유는 iteration을 사용할때, iteration을 새로 생성하지 않는 이상 내부적으로 가지고 있는 List의 스냅샷에 의존하기 때문에 여러 스레드에 안전하다.

 

즉, 변경 작업과 읽기 작업에 사용되는 오브젝트가 서로 다르다.(복제본)

posted by 여성게
:
Database/MongoDB 2019. 9. 16. 22:57

 

이번 포스팅 내용은 자주 사용되는 SQL문과 MongoDB와의 쿼리를 비교하는 포스팅입니다. 

 

SQL Schema Statements MongoDB Schema Statements

CREATE TABLE people(

id MEDIUMINT NOT NULL AUTO_INCREMENT,

user_id varchar(30),

age number,

status char(1),

PRIMARY KEY(id)

)

db.people.insertOne({

user_id:"abc123",

age:55,

status:"A"

})

암시적으로 삽입 작업에서 _id를 생략했다면 내부적으로 _id에 값을 추가한다. 컬렉션 또한 삽입시점에 생성된다.

 

그러나 컬렉션을 명시적으로 생성가능하다.

 

db.createCollection("people")

 

ALTER TABLE people ADD join_date DATETIME

컬렉션은 문서 구조를 설명하거나 강제하지 않는다. 

그러나, 문서 레벨에서 updateMany() 오퍼레이션은 $set 오퍼레이션을 사용하여 존재하는 문서에 새로운 필드를 추가할 수 있다.

 

db.people.updateMany({},{$set:{join_date:new Date()}})

ALTER TABLE people DROP COLUMN join_date

컬렉션은 문서 구조를 설명하거나 강제하지 않는다.

 

그러나, 문서 레벨에서 updateMany() 오퍼레이션은 $unset 오퍼레이션을 사용하여 이미 존재하는 문서의 필드를 제거할 수 있다.

 

db.people.updateMany({},{$unset:{"join_date":""}})

CREATE INDEX idx_user_id_asc ON people(user_id) db.people.createIndex({user_id:1})
CREATE INDEX idx_user_id_asc_age_desc ON people(user_id,age DESC) db.people.createIndex({user_id:1,age:-1})
DROP TABLE people db.people.drop()

 

위는 테이블 수준에서 자주 사용되는 SQL과 비교한 몽고디비 명령이다.

 

Insert

 

SQL Insert Statements MongoDB insertOne() Statements
INSERT INTO people(user_id,age,status) VALUES ("bcd001",45,"A") db.people.insertOne({user_id:"bcd001",age:45,status:"A"})

 

Select

암묵적으로 몽고디비는 _id 필드를 결과에 포함시킨다. 만약 _id 필드를 결과에서 제외시키고 싶다면 명시적으로 옵션을 지정해야한다.

SQL Select Statements MongoDB find() Statements
SELECT * FROM PEOPLE db.people.find()
SELECT id,user_id,status FROM people db.people.find({},{user_id:1,status:1})
SELECT * FROM people WHERE status = "A" db.people.find({status:"A"})
SELECT user_id,status FROM people WHERE status = "A" db.people.find({status:"A"},{user_id:1,status:1,_id:0})
SELECT * FROM people WHERE status != "A" db.people.find({status:{$ne:"A"}})
SELECT * FROM people WHERE status = "A" AND age = 50 db.people.find({status:"A",age:50})
SELECT * FROM people WHERE status = "A" OR age = 50 db.people.find({$or:[{status:"A"},{age:50}]})
SELECT * FROM people WHERE age > 25 AND age <=50 db.people.find({age:{$gt:25,$lte:50}})
SELECT * FROM people WHERE user_id LIKE "%bc%"

db.people.find({user_id:/bc/})

or

db.people.find({user_id:{$regex:/bc/}})

SELECT * FROM people WHERE user_id LIKE "bc%"

db.people.find({user_id:/^bc/})

or

db.people.find({user_id:{$regex:/^bc/}})

SELECT * FROM people WHERE status = "A" ORDER BY user_id ACS db.people.find({status:"A"}).sort({user_id:1})
SELECT * FROM people WHERE status="A" ORDER BY user_id DESC db.people.find({status:"A"}).sort({user_id:-1})
SELECT COUNT(*) FROM people

db.people.count()

or

db.people.find().count()

SELECT COUNT(user_id) FROM people

db.people.count({user_id:{$exist:true}})

or

db.people.find({user_id:{$exist:true}}).count()

SELECT COUNT(*) FROM people WHERE age > 30

db.people.count({age:{$gt:30}})

or

db.people.find({age:{$gt:30}}).count()

SELECT DISTINCT(status) FROM people

db.people.aggregate([{$group:{_id:"$status"}}])

or

db.people.distinct("status")

SELECT * FROM people LIMIT 1

db.people.findOne()

or

db.people.find().limit(1)

SELECT * FROM people LIMIT 5 SKIP 10 db.people.find().limit(5).skip(10)

 

Update Records

 

SQL Update Statements MongoDB updateMany() Statements
UPDATE people SET status = "C" WHERE age > 25 db.people.updateMany({age:{$gt:25}},{$set:{status:"C"}})
UPDATE people SET age = age +3 WHERE status = "A" db.people.updateMany({status:"A"},{$inc:{age:3}})

 

Delete Records

 

SQL Delete Statements MongoDB deleteMany() Statements
DELETE FROM people WHERE status = "D" db.people.deleteMany({status:"D"})
DELETE FROM people db.people.deleteMany({})

 

여기까지 자주 사용되는 SQL에 대한 MongoDB 쿼리 비교였습니다. 이보다 더 많은 기능들이 있지만 추후 천천히 다루어보겠습니다.

posted by 여성게
: