ãããããã«ïŒ
ç§ãã¡ã¯ãã®ããŒãã«ã€ããŠåŒãç¶ã調æ»ãç¶ããŸãã О ããŒã¿ããŒã¹ ã¬ãã«ãå«ã¿ãŸããæ¬æ¥ã¯ãå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãèšèšããéã«ãJava ã³ãŒãã§ã¯ãªãããŒã¿ããŒã¹æ§é ãæ±ºå®çã«éèŠã§ããçç±ããã®æ¹æ³ããã®ã«ãŒã«ã«ã¯ã©ã®ãããªäŸå€ãããã®ãââã«ã€ããŠèª¬æããããšããå§ãããŸãã
ãã®ããªãé
ããèšäºã§ã¯ãã»ãšãã©ã®å Žåãã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ ã¢ãã«ã¯ãJava ãã¡ãŒã¹ãã(ãŸãã¯äœ¿çšããŠããã¯ã©ã€ã¢ã³ãèšèª) ã§ã¯ãªããããŒã¿ããŒã¹ ãã¡ãŒã¹ããã§èšèšããå¿
èŠããããšèããçç±ã説æããŸãã 2 çªç®ã®ã¢ãããŒããéžæãããšããããžã§ã¯ããæé·ãå§ãããšãã«ãé·ãèŠçãšèŠæ©ã®éãæ©ãããšã«ãªããŸãã
ãã®èšäºã¯ ãStack Overflow ã§è³ªåãããŸããã
Redditã§ã®è峿·±ãè°è« О .
ã³ãŒãçæ
jOOQ ãç¥ã£ãåŸãjOOQ ãåäœããããã«ãœãŒã¹ ã³ãŒãçæã«å€§ããäŸåããŠãããšããäºå®ã«æ€æ šãããŠãŒã¶ãŒãããå°æ°ããããšã«ãç§ã¯ãšãŠãé©ããŠããŸããããªããé©åã ãšæãæ¹æ³ã§ jOOQ ã䜿çšããããšã劚ãã人ã¯ããŸããããã³ãŒãçæã䜿çšããããšã匷å¶ãã人ãããŸãããããããããã©ã«ãã§ã¯ïŒããã¥ã¢ã«ã«èšèŒãããŠããããã«ïŒãjOOQ ã¯ãïŒã¬ã¬ã·ãŒïŒããŒã¿ããŒã¹ ã¹ããŒãããå§ããŠãjOOQ ã³ãŒã ãžã§ãã¬ãŒã¿ãŒã䜿çšããŠãªããŒã¹ ãšã³ãžãã¢ãªã³ã°ããããŒãã«ã衚ãã¯ã©ã¹ã®ã»ãããååŸãããããã®ããŒãã«ã«å¯ŸããŠåå®å šãªã¯ãšãªãèšè¿°ããŸãã
for (Record2<String, String> record : DSL.using(configuration)
// ^^^^^^^^^^^^^^^^^^^^^^^ ÐМÑПÑЌаÑÐžÑ ÐŸ ÑОпаÑ
вÑвеЎеМа Ма
// ПÑМПваМОО ÑгеМеÑОÑПваММПгП кПЎа, Ма кПÑПÑÑй ÑÑÑлаеÑÑÑ Ð¿ÑОвеЎеММПе
// МОже ÑÑлПвОе SELECT
.select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME)
// vvvvv ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ÑгеМеÑОÑПваММÑе ОЌеМа
.from(ACTOR)
.orderBy(1, 2)) {
// ...
}ã³ãŒãã¯ãã«ãå€ã§æåã§çæããããããã«ãããšã«æåã§çæãããŸããäŸãã°ããã®ãããªåçã¯ã .
ãœãŒã¹ã³ãŒãã®çæ
ã³ãŒãçæã«å¯Ÿãããããã®ã¢ãããŒãïŒæåãšèªåïŒã«ã¯ãããŸããŸãªå²åŠãå©ç¹ãããã³æ¬ ç¹ããããŸããããã®èšäºã§ã¯è©³çްã«ã¯èª¬æããŸãããããããäžè¬çã«ãçæãããã³ãŒãã®éèŠãªç¹ã¯ãã·ã¹ãã å å€ã§åœç¶ã®ããšãšæã£ãŠãããçå®ãã Java ã§åçŸã§ããããšã§ããããæå³ãããã¯ã³ã³ãã€ã©ããœãŒã¹ ã³ãŒããããã€ãã³ãŒãããã·ã³ ã³ãŒãããŸãã¯ãã®ä»ã®çš®é¡ã®ã³ãŒããçæãããšãã«è¡ãããšã§ããã€ãŸããäœããã®çç±ã§ãå¥ã®èšèªã§ãçå®ãã®è¡šçŸãåŸãããã®ã§ãã
ãã®ãããªã³ãŒããžã§ãã¬ãŒã¿ãŒã¯æ°å€ããããŸããäŸãã°ã ãååã¯åžžã«åãã§ãã
- äœããã®çå®ïŒå éšãŸãã¯å€éšïŒãååšããŸããããšãã°ã仿§ãããŒã¿ ã¢ãã«ãªã©ã§ãã
- ç§ãã¡ã®ããã°ã©ãã³ã°èšèªã§ã¯ããã®çå®ãããŒã«ã«ã«è¡šçŸããå¿ èŠããããŸãã
ããã«ãåé·æ§ãé¿ããããã«ããã®ãããªè¡šçŸãçæããããšãã»ãšãã©ã®å Žåã«æšå¥šãããŸãã
åãããã€ããŒãšæ³šéåŠç
泚: jOOQã®ã³ãŒãçæã«å¯Ÿãããã1ã€ã®ããçŸä»£çã§å ·äœçãªã¢ãããŒãã¯ãåãããã€ãã䜿çšããããšã§ãã ããã®å Žåãã³ãŒãã¯å®éã«ã¯ã³ã³ãã€ã«æ®µéã§ã³ã³ãã€ã©ã«ãã£ãŠçæãããŸãããœãŒã¹åœ¢åŒã§ã¯ãååãšããŠãã®ãããªã³ãŒãã¯ååšããŸããã Javaã«ã¯ãã¢ãããŒã·ã§ã³ããã»ããµãšåŒã°ãããããŸããšã¬ã¬ã³ãã§ã¯ãªããé¡äŒŒã®ããŒã«ãããã .
ããæå³ãæåã®ã±ãŒã¹ãšåãããšãããã§ãèµ·ãã£ãŠããŸãããæ¬¡ã®ç¹ãç°ãªããŸãã
- çæãããã³ãŒãã¯è¡šç€ºãããŸãã (ãã®ç¶æ³ã¯ã誰ãã«ãšã£ãŠããã»ã©äžå¿«ã§ã¯ãªããšæããããããããŸãã)
- åãæäŸå¯èœã§ããããšãã€ãŸããçå®ããåžžã«å©çšå¯èœã§ããããšã確èªããå¿ èŠããããŸãã ãçå®ããæ³šéãããã³ãã¯ã®å Žåãããã¯ç°¡åã§ããæäœãåžžã«å©çšå¯èœãªã©ã€ãæ¥ç¶ã«äŸåããããŒã¿ããŒã¹ ã¢ãã«ã®å Žåãç¶æ³ã¯å°ãè€éã«ãªããŸãã
ã³ãŒãçæã®åé¡ã¯äœã§ãã?
ã³ãŒãçæãæåã§å®è¡ããããèªåã§å®è¡ããããšããé£ããåé¡ã«å ããŠãã³ãŒãçæã¯ãŸã£ããå¿ èŠãªããšèãã人ãããããšãèšåãã䟡å€ããããŸããç§ãæãé »ç¹ã«ééãããã®èгç¹ã®æ£åœæ§ã¯ããã«ã ãã€ãã©ã€ã³ãèšå®ããã®ãé£ãããšããããšã§ããã¯ããæ¬åœã«é£ããã§ãã远å ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã¹ããçºçããŸããç¹å®ã®è£œå (jOOQãJAXBãHibernate ãªã©) ã䜿ãå§ããã°ããã®å Žåã¯ãäœæ¥ç°å¢ã®èšå®ã«æéããããããããã®æéã API èªäœã®åŠç¿ã«è²»ãããŠäŸ¡å€ãåŒãåºãæ¹ãããã§ãããã
ãžã§ãã¬ãŒã¿ãŒã®æ§é ãçè§£ããããã®ã³ã¹ããé«ãããå ŽåãAPI ã¯ã³ãŒã ãžã§ãã¬ãŒã¿ãŒã䜿ããããããäžã§å®éã«ã¯äžååãªåœ¹å²ãæãããŠããããšã«ãªããŸã (åŸã§ã«ã¹ã¿ãã€ãºãé£ããããšã倿ããŸã)ããã®ãã㪠API ã§ã¯ã䜿ãããããæåªå äºé ã«ãªãã¯ãã§ããããããããã¯ã³ãŒãçæã«å¯Ÿããåè«ã® 1 ã€ã«ãããŸããããã以å€ã®å Žåãå éšãŸãã¯å€éšã®çå®ã®ããŒã«ã«è¡šçŸãèšè¿°ããã®ã¯å®å šã«æäœæ¥ã«ãªããŸãã
ããããã¹ãŠãè¡ãæéããªããšèšã人ãå€ãã§ãããã圌ãã®ã¹ãŒããŒè£œåã®ç· ãåãã¯è¿«ã£ãŠããŸããåŸã§çµç«ã©ã€ã³ã培åºçã«èª¿ã¹ãã€ããã§ããæéã¯ãããŸããããç§ã¯åœŒãã«çããŸãïŒ

,
ããããHibernate/JPA ã§ã¯ãJavaãã³ãŒããæžãã®ã¯éåžžã«ç°¡åã§ãã
æ¬åœã«ã Hibernate ãšãã®ãŠãŒã¶ãŒã«ãšã£ãŠãããã¯ç¥çŠã§ãããšåæã«åªãã§ããããŸãã Hibernate ã§ã¯ã次ã®ããã«ããã€ãã®ãšã³ãã£ãã£ãç°¡åã«èšè¿°ã§ããŸãã
@Entity
class Book {
@Id
int id;
String title;
}ãããŠã»ãŒãã¹ãŠã®æºåãæŽããŸãããããã§ããã®ãšã³ãã£ãã£ã SQL ãæ¹èšãã® DDL ã§ã©ã®ããã«å®çŸ©ãããããšããè€éãªã詳现ããçæããã®ã¯ãHibernate ã®åœ¹å²ã§ãã
CREATE TABLE book (
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
title VARCHAR(50),
CONSTRAINT pk_book PRIMARY KEY (id)
);
CREATE INDEX i_book_title ON book (title);âŠãããŠã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãéå§ããŸããããã«å§ããŠããŸããŸãªããšã詊ãããšãã§ãããæ¬åœã«çŽ æŽãããæ©èœã§ãã
ããããèš±ããŠãã ãããåãã€ããŸããã
- Hibernate ã¯å®éã«ãã®ååä»ãäž»ããŒå®çŸ©ã匷å¶ããã®ã§ãããã?
- Hibernate 㯠TITLE ã«ã€ã³ããã¯ã¹ãäœæããŸãã? - 確ãã«å¿ èŠã«ãªããšæããŸãã
- Hibernate ã¯ãIdentity 仿§ã§ãã®ããŒã確å®ã«èå¥ããã®ã§ãããã?
ããããããã§ã¯ãªãã§ãããããããžã§ã¯ããæåããéçºããŠããå Žåã¯ãå¿ èŠãªæ³šéã远å ããããå€ãããŒã¿ããŒã¹ãç Žæ£ããŠæ°ããããŒã¿ããŒã¹ãçæãããšäŸ¿å©ã§ãããããã£ãŠãBook ãšã³ãã£ãã£ã¯æçµçã«æ¬¡ã®ããã«ãªããŸãã
@Entity
@Table(name = "book", indexes = {
@Index(name = "i_book_title", columnList = "title")
})
class Book {
@Id
@GeneratedValue(strategy = IDENTITY)
int id;
String title;
}
ããããå床çæããŸãããã®å Žåããæåã¯éåžžã«ç°¡åã«ãªããŸãã
ãã ããåŸã§æ¯æãå¿ èŠããããŸãã
é ããæ©ãããçç£ãéå§ããªããã°ãªããŸããããã®æããã®ã¢ãã«ã¯åäœã忢ããŸãããªããªãïŒ
éçšæã«ã¯ãå¿ èŠã«å¿ããŠå€ãããŒã¿ããŒã¹ãç Žæ£ããŠæåããããçŽãããšã¯ã§ããªããªããŸããããŒã¿ããŒã¹ã¯ã¬ã¬ã·ãŒ ããŒã¿ããŒã¹ã«ãªããŸãã
ããããå ããã£ãšããªãã¯æžãç¶ããªããã°ãªããªã ããã®å Žåãããªãã®ãšã³ãã£ãã£ã¯ã©ããªãã®ã§ãããã?æåã§é©å¿ããããïŒäœæ¥ã 2 åã«ãªããŸãïŒãHibernate ã«åçæãæç€ºãããïŒçæããããã®ãæåŸ ã©ããã«ãªãå¯èœæ§ã¯ã©ããããã§ããããïŒããããã«ããŠãè² ãã§ãã
ãããã£ãŠãæ¬çªç°å¢ã«ç§»è¡ãããšãããã ããããå¿ èŠã«ãªããŸãããããŠãããããè¿ éã«çç£ã«æå ¥ããå¿ èŠããããŸããæ¬çªç°å¢ãžã®ç§»è¡ã®ã¹ã ãŒãºãªãã€ãã©ã€ã³ãæºåããŠèšå®ããŠããªãããããã¹ãŠã«å¿ æ»ã«ããããé©çšããŠããŸãããããšããã¹ãŠãæ£ããè¡ãæéããªããªã£ãŠããŸããŸãããããŠããã€ã誰ãä»ã®äººã®ããã«ããŠãèªåã®ããã§ã¯ãªããããšãHibernate ã責ããŠããŸããŸã...
ããããæåãããã¹ãŠããŸã£ããéãããæ¹ã§å®è¡ã§ããã¯ãã ãããšãã°ãèªè»¢è»ã«äžžãè»èŒªãä»ããŸãã
ãŸãããŒã¿ããŒã¹
ããŒã¿ããŒã¹ ã¹ããŒãã®æ¬åœã®ãçå®ããšãã®ã䞻暩ãã¯ãããŒã¿ããŒã¹å
ã«ãããŸããã¹ããŒãã¯ããŒã¿ããŒã¹èªäœã§ã®ã¿å®çŸ©ãããä»ã®å Žæã§ã¯å®çŸ©ãããŸããããŸããåã¯ã©ã€ã¢ã³ãã«ã¯ãã®ã¹ããŒãã®ã³ããŒããããããã¹ããŒããšãã®æŽåæ§ã匷å¶ããã«ã¯ãæ
å ±ãæ ŒçŽãããŠããããŒã¿ããŒã¹å
ã§é©åã«å®è¡ããããšãçã«ããªã£ãŠããŸãã
ããã¯å€ããŠãé³è
ãªç¥æµã§ããäž»ããŒãšäžæããŒã¯é©åã§ããå€éšããŒã¯è¯ãã§ããå¶çŽã確èªããã®ã¯è¯ãããšã§ãã - 倧äžå€«ã
ããã ãã§ã¯ãããŸãããããšãã°ãOracle ã䜿çšããå Žåã¯ã次ã®ããã«æå®ããå¿ èŠããããŸãã
- ããŒãã«ã¯ã©ã®ããŒãã«ã¹ããŒã¹ã«ãããŸãã?
- 圌女㮠PCTFREE å€ã¯äœã§ãã?
- ã·ãŒã±ã³ã¹å ã®ãã£ãã·ã¥ ãµã€ãºã¯ã©ããããã§ãã (ID ã®åŸã)
ããããã¹ãŠã¯å°èŠæš¡ãªã·ã¹ãã ã§ã¯éèŠã§ã¯ãªããããããŸãããããããã° ããŒã¿ãé åã«å°éãããŸã§åŸ ã€å¿ èŠã¯ãããŸãããäžèšã®ãããªãã³ããŒæäŸã®ã¹ãã¬ãŒãžæé©åã®ã¡ãªãããããã£ãšæ©ã段éãã享åãå§ããããšãã§ããŸããç§ãèŠã ORM ã®ã©ãã (jOOQ ãå«ã)ãããŒã¿ããŒã¹ã§äœ¿çšããå¯èœæ§ã®ãã DDL ãªãã·ã§ã³ã®å®å šãªã»ãããžã®ã¢ã¯ã»ã¹ãæäŸããŠããŸããã ORM ã¯ãDDL ã®èšè¿°ã«åœ¹ç«ã€ããŒã«ãããã€ãæäŸããŸãã
ããããçµå±ã®ãšãããé©åã«èšèšãããã¹ããŒã㯠DDL ã§ææžããããŸããçæããã DDL ã¯ããã®è¿äŒŒå€ã«ãããŸããã
ã¯ã©ã€ã¢ã³ãã¢ãã«ã¯ã©ãã§ãã?
åè¿°ã®ããã«ãã¯ã©ã€ã¢ã³ãã§ã¯ããŒã¿ããŒã¹ ã¹ããŒãã®ã³ã㌠(ã¯ã©ã€ã¢ã³ã ãã¥ãŒ) ãå¿ èŠã«ãªããŸããèšããŸã§ããªãããã®ã¯ã©ã€ã¢ã³ã ãã¥ãŒã¯å®éã®ã¢ãã«ãšåæããŠããå¿ èŠããããŸãããããéæããããã®æåã®æ¹æ³ã¯äœã§ãããã?ã³ãŒããžã§ãã¬ãŒã¿ãŒã®äœ¿çšã
ãã¹ãŠã®ããŒã¿ããŒã¹ã¯ãSQL ãä»ããŠã¡ã¿æ å ±ãå ¬éããŸããããŸããŸãª SQL æ¹èšã§ããŒã¿ããŒã¹ãããã¹ãŠã®ããŒãã«ãååŸããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
-- H2, HSQLDB, MySQL, PostgreSQL, SQL Server
SELECT table_schema, table_name
FROM information_schema.tables
-- DB2
SELECT tabschema, tabname
FROM syscat.tables
-- Oracle
SELECT owner, table_name
FROM all_tables
-- SQLite
SELECT name
FROM sqlite_master
-- Teradata
SELECT databasename, tablename
FROM dbc.tables
ãããã®ã¯ãšãªïŒãŸãã¯ããã¥ãŒããããªã¢ã©ã€ãºããã¥ãŒãããŒãã«å€é¢æ°ãèæ ®ããå¿ èŠããããã©ããã«å¿ããŠãåæ§ã®ã¯ãšãªïŒããåŒã³åºãã䜿çšããŠå®è¡ãããŸãã JDBC ããããŸã㯠jOOQ ã¡ã¿ã¢ãžã¥ãŒã«ã䜿çšããŠã
ãã®ãããªã¯ãšãªã®çµæãããã¯ã©ã€ã¢ã³ãã§äœ¿çšããŠãããã¯ãããžã«é¢ä¿ãªããããŒã¿ããŒã¹ ã¢ãã«ã®ã¯ã©ã€ã¢ã³ãåŽãã¥ãŒãçæããã®ã¯æ¯èŒçç°¡åã§ãã
- JDBCãŸãã¯Springã䜿çšããŠããå Žåã¯ãæåå宿°ã®ã»ãããäœæã§ããŸãã
- JPAã䜿çšããå Žåã¯ããšã³ãã£ãã£ãèªåã§çæã§ããŸãã
- jOOQã䜿çšãããšãjOOQã¡ã¿ã¢ãã«ãçæã§ããã
ã¯ã©ã€ã¢ã³ã API ãæäŸããæ©èœã®é (jOOQ ã JPA ãªã©) ã«å¿ããŠãçæãããã¡ã¿ã¢ãã«ã¯éåžžã«è±å¯ã§å®å šãªãã®ã«ãªããŸããäŸãã°ãæé»ã®é£æ³ã®å¯èœæ§ãèããŠã¿ãŸãããã ããã¯ãããŒãã«éã«ååšããå€éšããŒé¢ä¿ã«é¢ããçæãããã¡ã¿æ å ±ã«äŸåããŸãã
ä»åŸã¯ãããŒã¿ããŒã¹ãæ¡å€§ãããšãã¯ã©ã€ã¢ã³ã ã³ãŒããèªåçã«æŽæ°ãããããã«ãªããŸããããšãã°ã次ã®ããšãæ³åããŠãã ããã
ALTER TABLE book RENAME COLUMN title TO book_title;æ¬åœã«ãã®ä»äºã2åããããã§ãã?ãããªãå Žåã§ãã DDL ãã³ããããããã«ã ãã€ãã©ã€ã³ã§å®è¡ããŠãæŽæ°ããããšã³ãã£ãã£ãååŸããã ãã§ãã
@Entity
@Table(name = "book", indexes = {
// ÐÑ ÐŸÐ± ÑÑПЌ заЎÑÐŒÑвалОÑÑ?
@Index(name = "i_book_title", columnList = "book_title")
})
class Book {
@Id
@GeneratedValue(strategy = IDENTITY)
int id;
@Column("book_title")
String bookTitle;
}ãŸãã¯ãæŽæ°ããã jOOQ ã¯ã©ã¹ãã»ãšãã©ã® DDL ã®å€æŽã¯ãæ§æã ãã§ãªãã»ãã³ãã£ã¯ã¹ã«ã圱é¿ããŸãããããã£ãŠãã³ã³ãã€ã«ãããã³ãŒãã調ã¹ãŠãããŒã¿ããŒã¹ã®å¢å€§ã«ãã£ãŠã©ã®ã³ãŒãã圱é¿ãåããã (ãŸãã¯åœ±é¿ãåããå¯èœæ§ãããã) ã確èªãããšåœ¹ç«ã¡ãŸãã
å¯äžã®çå®
ã©ã®ãããªãã¯ãããžãŒã䜿çšããŠããŠããäœããã®ãµãã·ã¹ãã ã®å¯äžã®çå®ã®ãœãŒã¹ãšãªãã¢ãã«ãåžžã« 1 ã€ååšããŸããå°ãªããšããç§ãã¡ã¯ãããç®æããŠããçå®ããã©ãã«ã§ããããšåæã«ã©ãã«ãååšããªããããªäŒæ¥ã®æ··ä¹±ãé¿ããå¿
èŠããããŸãããã¹ãŠããã£ãšã·ã³ãã«ã«ãªãã¯ãã§ããä»ã®ã·ã¹ãã ãš XML ãã¡ã€ã«ã亀æããã ãã®å Žåã¯ãXSD ã䜿çšããŸãã jOOQ ã® INFORMATION_SCHEMA ã¡ã¿ã¢ãã«ã XML 圢åŒã§èŠãŠã¿ãŸãããã
- XSDã¯ããçè§£ãããŠãã
- XSD 㯠XML ã³ã³ãã³ããéåžžã«é©åã«ããŒã¯ã¢ãããããã¹ãŠã®ã¯ã©ã€ã¢ã³ãèšèªã§ã®æ€èšŒãå¯èœã«ããŸãã
- XSD ã¯é©åã«ããŒãžã§ã³ç®¡çãããŠãããé«åºŠãªäžäœäºææ§ãåããŠããŸãã
- XSDã¯XJCã䜿çšããŠJavaã³ãŒãã«å€æã§ããŸãã
æåŸã®ç¹ã¯éèŠã§ãã XML ã¡ãã»ãŒãžã䜿çšããŠå€éšã·ã¹ãã ãšéä¿¡ããå Žåãã¡ãã»ãŒãžãæå¹ã§ããããšã確èªããå¿ èŠããããŸããããã¯ãJAXBãXJCãXSD ã䜿çšãããšéåžžã«ç°¡åã«å®çŸã§ããŸããã¡ãã»ãŒãžã Java ãªããžã§ã¯ããšããŠäœæãããJava ãã¡ãŒã¹ããèšèšã¢ãããŒããæ¡çšããå Žåãã¡ãã»ãŒãžãæå³ã®ããæ¹æ³ã§ XML ã«ãããã³ã°ããå¥ã®ã·ã¹ãã ã«éä¿¡ããŠäœ¿çšã§ãããšæåŸ ããã®ã¯ãŸã£ããã®çæ°ã§ãããã®æ¹æ³ã§çæããã XML ã¯ãå質ãéåžžã«äœããææžåãããŠããããé²åãå°é£ã«ãªããŸãããã®ãããªã€ã³ã¿ãŒãã§ãŒã¹ã«ãµãŒãã¹ ã¬ãã«å¥çŽ (SLA) ããã£ãå Žåãç§ãã¡ã¯ããã«ãããå°ç¡ãã«ããŠããã§ãããã
æ£çŽã«èšããšãããã¯ãŸãã« JSON API ã§åžžã«èµ·ãã£ãŠããããšã§ãããããã¯ãŸãå¥ã®è©±ã§ãæ¬¡åæŠããŸã...
ããŒã¿ããŒã¹ïŒåããã®
ããŒã¿ããŒã¹ãæäœãããšããããã¯ãã¹ãŠåºæ¬çã«äŒŒãŠããããšã«æ°ã¥ããŸããããŒã¿ããŒã¹ã¯ããŒã¿ãææããã¹ããŒãã管çããå¿ èŠããããŸããã¹ããŒãã«å ãããã倿Žã¯ãå¯äžã®çå®ã®ãœãŒã¹ãæŽæ°ãããããã«ãDDL ã«çŽæ¥å®è£ ããå¿ èŠããããŸãã
ãœãŒã¹ã®æŽæ°ãçºçãããšããã¹ãŠã®ã¯ã©ã€ã¢ã³ããã¢ãã«ã®ã³ããŒãæŽæ°ããå¿ èŠããããŸããäžéšã®ã¯ã©ã€ã¢ã³ãã¯ãjOOQ ãš Hibernate ãŸã㯠JDBC (ãŸãã¯ããããã¹ãŠ) ã䜿çšã㊠Java ã§èšè¿°ãããå ŽåããããŸããä»ã®ã¯ã©ã€ã¢ã³ã㯠Perl ã§æžãããŠãããããããŸãã (幞éãç¥ããŸã)ããŸãä»ã®ã¯ã©ã€ã¢ã³ã㯠C# ã§æžãããŠãããããããŸãããããã¯åé¡ã§ã¯ãããŸãããã¡ã€ã³ã¢ãã«ã¯ããŒã¿ããŒã¹å ã«ãããŸãã ORM ã«ãã£ãŠçæãããã¢ãã«ã¯éåžžãå質ãäœããããã¥ã¡ã³ãåãäžååã§ãé²åãå°é£ã§ãã
ã ããééããããªãã§ãã ãããæåããééããããªãã§ãã ãããããŒã¿ããŒã¹ããäœæ¥ããŸããèªååã§ãããããã€ã¡ã³ã ãã€ãã©ã€ã³ãæ§ç¯ããŸããã³ãŒã ãžã§ãã¬ãŒã¿ãŒãæå¹ã«ãããšãããŒã¿ããŒã¹ ã¢ãã«ãç°¡åã«ã³ããŒããŠã¯ã©ã€ã¢ã³ãã«ãã³ãã§ããããã«ãªããŸããã³ãŒããžã§ãã¬ãŒã¿ãŒã«ã€ããŠå¿é ããå¿ èŠã¯ãããããŸããããããã¯è¯ãã§ãããããã䜿çšãããšãçç£æ§ãåäžããŸããæåããå°ãæéããããŠèšå®ããã ãã§ããããžã§ã¯ãã®ã¹ããŒãªãŒã圢äœãçç£æ§ã®åäžãäœå¹Žã«ãããã£ãŠäº«åã§ããŸãã
ãŸã æè¬ããªãã§ãã ãããåŸã§æè¬ããŠãã ããã
æç¢ºå
æç¢ºã«è¿°ã¹ãŸããšããã®èšäºã¯ãããŒã¿ããŒã¹ ã¢ãã«ã«åãããŠã·ã¹ãã å šäœ (ã€ãŸãããµããžã§ã¯ãé åãããžãã¹ ããžãã¯ãªã©) ã倿Žããå¿ èŠããããšäž»åŒµãããã®ã§ã¯ãããŸããããã®èšäºã§ã¯ãããŒã¿ããŒã¹ãšå¯Ÿè©±ããã¯ã©ã€ã¢ã³ã ã³ãŒãã¯ãããèªäœããã¡ãŒã¹ãã¯ã©ã¹ã®ç¶æ ã§ããŒã¿ããŒã¹ ã¢ãã«ãåçŸããªãããã«ãããŒã¿ããŒã¹ ã¢ãã«ãšäžè²«æ§ã®ããæ¹æ³ã§åäœããå¿ èŠãããããšã䞻匵ããŸãããã®ããžãã¯ã¯éåžžãã¯ã©ã€ã¢ã³ãã®ããŒã¿ ã¢ã¯ã»ã¹å±€ã«é 眮ãããŸãã
äžéšã®å Žæã§ã¯äŸç¶ãšã㊠2 å±€ã¢ãŒããã¯ãã£ãæ®ã£ãŠããŸããããã®ãããªã·ã¹ãã ã¢ãã«ãå¯äžå¯èœãªã¢ãã«ã§ããå¯èœæ§ããããŸããããããã»ãšãã©ã®ã·ã¹ãã ã§ã¯ãããŒã¿ ã¢ã¯ã»ã¹å±€ã¯ããŒã¿ããŒã¹ ã¢ãã«ãã«ãã»ã«åããããµãã·ã¹ãã ãã§ããããã«æãããŸãã
äŸå€
ãã¹ãŠã®ã«ãŒã«ã«ã¯äŸå€ããããããŒã¿ããŒã¹ãã¡ãŒã¹ãããœãŒã¹ã³ãŒãçæã®ã¢ãããŒããäžé©åã«ãªãå Žåãããããšã¯ãã§ã«è¿°ã¹ãŸããã以äžã«ããã®ãããªäŸå€ãããã€ã瀺ããŸã (ããããä»ã«ãäŸå€ã¯ãããŸã)ã
- åè·¯ãäžæã§çºèŠããå¿ èŠãããå Žåãããšãã°ããŠãŒã¶ãŒãä»»æã®å³ãããã²ãŒãããã®ã«åœ¹ç«ã€ããŒã«ãæäŸããŠãããšããŸãããµããããã§ã¯ã³ãŒãçæã¯è¡ãããŸããããããããã¯ãããŒã¿ããŒã¹ãæåªå ã§ãã
- äœããã®åé¡ã解決ããããã«åè·¯ãå³åº§ã«çæããå¿ èŠãããå Žåããã®äŸã¯ããã¿ãŒã³ã®å°ã掟æãªããŒãžã§ã³ã®ããã«æããŸãã ã€ãŸããæç¢ºã«å®çŸ©ãããã¹ããŒã ãå®éã«ã¯ååšããªããšããããšã§ãããã®å ŽåãRDBMS ãé©åã§ãããã©ããã確èªããããšã¯äžå¯èœã§ããããšããããããŸãã
äŸå€ã¯æ¬è³ªçã«äŸå€çãªãã®ã§ããã RDBMS ãé¢ä¿ããã»ãšãã©ã®å Žåãã¹ããŒãã¯äºåã«ããã£ãŠãããRDBMS å
ã«ååšããå¯äžã®ãçå®ãã®ãœãŒã¹ã§ããããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¯ããããæŽŸçããã³ããŒãååŸããå¿
èŠããããŸããçæ³çã«ã¯ãããã«ã¯ã³ãŒã ãžã§ãã¬ãŒã¿ãŒã䜿çšããå¿
èŠããããŸãã
åºæïŒ habr.com
