Voice in the Gentle Wind

สิงหาคม 30, 2007

Google Gears ORM 0.2

Filed under: ajax, javascript — deans4j @ 3:57 am

Object-Relational Mapping กลายเป็นของที่ขาดไม่ได้ซะแล้วในการทำงานกับโค้ดที่ต้องยุ่งกับฐานข้อมูล แม้ตัวโค้ดและฐานข้อมูลจะอยู่ในรูปภาษา JavaScript ก็เถอะ

GearsORM 0.2 โดย Uriel Katz ทำออกมาโดยมีฟีเจอร์หลักๆ ที่จำเป็น เช่น

  •  สร้างตารางจากโมเดลโดยตรง
  • สนับสนุนเรื่อง constrain และ key แบบต่างๆ
  • ทำให้การโหลดออบเจกต์จาก JSON เข้าสู่ฐานข้อมูลทำได้โดยตรง
  • คำสั่งในการ select, delete ในการบริหารจัดการข้อมูล
  • ทำ Transaction ได้ด้วย
  • สร้างตารางที่มีลักษณะความสัมพันธ์เข้าหาตัวเองได้

ที่มา – GearsORM
เท่าที่ดูผ่านๆ ก็น่าสนใจดีเหมือนกัน ไม่ได้เชี่ยว JavaScript เลยไม่มีอะไรจะ comment ถึงมันมากนัก นอกจากสงสัยคำถามทั่วไปกว่านั้นเรื่อง

  • รูปแบบการคิดและโปรแกรมจะเปลี่ยนไปแค่ไหนถ้าฝั่ง client มีฐานข้อมูล? จะกลายร่างเป็นกึ่งๆ thick client เลยหรือเปล่า? ถือเป็นข้อดีหรือข้อเสีย?
  • แนวคิด หลักการออกแบบฐานข้อมูลฝั่ง client จะต้องเป็นอย่างไรเพื่อให้ได้ผลประโยชน์สูงสุดของการทำ offline application?
  • แนวทาง ปัญหา และการแก้ไขเมื่อต้องการ synchronize เพื่อเชื่อมข้อมูลเมื่อเข้าสู่โหมด online

หืมม…

Advertisements

10 ความเห็น »

  1. สุดยอด หรือเปล่า อิอิ

    ความเห็น โดย idome — สิงหาคม 30, 2007 @ 9:15 am

  2. การมีฐานข้อมูลบน JavaScript บน client-side (ปัจจุบันนี้ ยังมีคนทำ server-side JavaScript หรือเปล่าหว่า?) น่าจะไม่ใ่ช่เืพื่อให้เป็นฐานข้อมูลที่ replicate มาจากฐานข้อมูลหลักที่ server
    แต่น่าจะเพื่ออำนวยความสะดวกในการทำงานกับข้อมูลบน client มากกว่า (หรือเปล่า?)

    เช่น query ข้อมูลจาก server มาแสดงเป็นตารางบน client ถ้าต้องการทำ sorting หรือ grouping ใหม่ ส่วนใหญ่จะต้องกลับไปทำที่ server อีกครั้ง (โดยการ query ใหม่)
    แต่ถ้ามีฐานข้อมูลชั่วคราวบน client ที่สร้าง table และ index ไว้ให้เหมาะสมกับการทำงานของ UI ก็น่าจะทำให้ทำงานได้สะดวกกว่า และทำให้ performance ดีกว่า

    เดาเอานะ

    ความเห็น โดย siroz — สิงหาคม 30, 2007 @ 12:43 pm

  3. ที่เคยทำเมื่อสมัยยังหนุ่มๆเป็น Web App แบบ offline บน CD-ROM โดยเป็น HTML ทั้งหมด และใช้ฐานข้อมูลเป็น XML
    จัดการข้อมูลด้วย JavaScript โดยทำการ Search ได้ (ใช้ JavaScript จัดการ QueryString) แต่เพิ่มลบแก้ไขข้อมูลไม่ได้…
    เรียกได้ว่าเป็นเป็น Read only file database

    แล้วถ้ามันเขียนได้ละมันจะดียังไง?

    มันเหนือนเอาข้อดีของ Web App กับ Desktop App มารวมกัน… ยังไง?
    1. ไม่ต้องคอย Update โปรแกรม (ข้อดีของ Web Application)
    2. ไม่ต้องกลัวเรื่องความลับข้อมูล เพราะข้อมูลอยู่ที่เครื่อง Desktop (ข้อดีของ Desktop Application) หลายบริษัทยังไม่กล้าใช้ Google App เพราะกลัวเรื่องความลับนี่แหละ…

    แว๊บไปดูที่ GearORM (ใช้ Trac อีกโปรเจคแล้ว) ยังไม่ได้ดูละเอียด (พยายามหาหน้า Architecture แต่ไม่เจอ) เข้าใจว่าฐานข้อมูลฝั่ง Client ที่ว่าเป็น Memory หรือเปล่า (ปิด Brwoser แล้วหายเลย) แต่ถ้าไม่ใช่ แล้วมันเก็บข้อมูลไว้ตรงไหนของ Client? File? Cookie?

    ส่วนเรื่อง Caching เพื่อทำอะไรบางอย่างแบบที่คุณ Siros ว่าก็มีประโยชน์ครับ แต่ถ้ามีโหมดแก้ไขได้ ต้องระวังเรื่องการ Sync ดังที่คุณ Dean บอกเช่นกัน

    อีกมุมที่น่าสนใจก็คือย้ายข้อมูลใน Session มาอยู่ที่ Client ยกตัวอย่าง Registration Form ที่กว่าจะได้ Save ลงฐานข้อมูลต้องเก็บข้อมูลจากหลายๆหน้าลง Session ไว้ก่อน และการกำหนดข้อมูลในหน้านี้แล้ว จะมีผลต้อการทำงานในหน้าถัดไป
    ดู Demo ในเว็บ GearORM เขาคงตั้งใจจะให้สร้าง company แล้วเก็บไว้ที่ Client แล้วสร้าง person ลงไปในแต่ละ company (แล้วถ้าจะ Save ไป Server ก็ไปทีเดียว)

    ว่าแต่…….ผมยังรันมันไม่ได้เลยนะ เจ้า Demo ที่เว็บ GearORM น่ะ เจอ JavaScript Error (IE7) 😀

    ความเห็น โดย เอี้ยก้วย ณ แอนฟิลด์ — สิงหาคม 30, 2007 @ 10:31 pm

  4. ข้อมูลของ Gears มันจะเก็บในsqlite db(embed db) การเก็บแต่ละที่ของdb file นั้นจะขึ้นอยู่กับbrowser อ่ะครับ เช่นถ้า
    เป็น IE มันจะเก็บใน C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Google Gears for Internet Explorer
    Fire fox จะเก็บใน C:\Documents and Settings\Administrator\Local Settings\Application Data\Mozilla\Firefox\Profiles\zj2brfbq.default\Google Gears for Firefox

    folder “zj2brfbq.default” คิดว่าgears มันคงgenerateมาอ่ะ

    เห็น javascript นี่มี mvc ด้วยนะครับแต่ไม่ได้ดูละเอียด แต่เห็นว่าอาจจะมีการเอามาช่วยแบ่ง
    เลเยอร์ของการ sync ด้วย(อันนี้ไม่มั่นใจครับ)
    แต่จากการลองเล่นgears ดูแล้วเราสามารถเก็บresourceบางอย่างของserverเข้ามาทาง
    clientได้เลยเช่นไฟล์image,js file,html,xml (แต่ีพวกนี้ browser มันก็cacheให้นินา) แต่ก็ลดtraffic ของ network กับ transactionบางอย่างได้พอควร กรณีที่เก็บข้อมูลทางclient ได้ก็แบ่งprocessบางส่วนให้กํบclient

    ความเห็น โดย redgene — สิงหาคม 31, 2007 @ 12:26 am

  5. แต่0.2แล้วหรอ พึ่งเห็น0.1เมื่อ 1-2เดือนที่แล้วเอง

    ความเห็น โดย redgene — สิงหาคม 31, 2007 @ 12:32 am

  6. ลองอีกทีรู้สึกจะเก็บไฟล์resource ชนิิดอะไรก็ได้บนclientเลยแฮะ พอเก็บแล้วเวลาจะดู
    ผ่านurlเดืมได้เลย รู้สึกมันจะทำlocal server เทียมขึ้นมาอ่ะ มันเลยใช้ได้แม้สายหลุด
    ุแต่ที่เล่ามาดันไม่เกี่ยวกะห้วข้อ gears orm แฮะ

    ความเห็น โดย redgene — สิงหาคม 31, 2007 @ 12:54 am

  7. ถ้าใช้มันหนักๆ มันจะทำให้การออกแบบ architecture เปลี่ยนสินะครับ ผมยังมองในแง่ดีว่ามันไม่น่าจะกรทบฝั่ง server side มากนัก แต่ถ้ามันมีผลค่อนข้างมาก อาจจะมีความเสี่ยงในการเลือกใช้เหมือนกัน

    ซึ่งถ้าเป็นอย่างนั้นไม่รู้ว่าจะดีหรือเปล่า เพราะเหมือนกับว่าเราไปพึ่งพิงกับ Gears มากเกินไป มันจะต่างกับกรณี Applet/Web Start+JavaDB ที่ dev รู้อยู่แล้วว่าถ้าจะ run ยังไงซะ client ก็ต้องมี JRE ซึ่งเราชั่งน้ำหนักแล้วเลือกตั้งแต่ออกแบบโปรแกรมแล้ว

    แต่การที่ app เป็น AJAX-based ผู้ใช้ไม่จำเป็นต้องลง Gears ก็ทำงานได้อยู่แล้ว ผมเลยมอง Gears เป็นเหมือนทางเลือกที่จะใช้ก็ได้ไม่ใช้ก็ได้ พอมันเป็นอย่างนี้ architecture ต้องออกแบบให้รองรับโหมดที่มีและไม่มี Gears อยู่ด้วย ซึ่งเป็น Cross-cutting Concern ตัวเบ่อเร่อเลยเหมือนกัน

    นั่นคือสิ่งที่ผมมองว่าอาจจะเป็นประเด็นให้คิดฝั่ง client ส่วนฝั่ง server ผมสนใจกรณีการ sync ไปมาระหว่างกัน ถ้าบอกว่าจะเอา Gears มาทำ offline app จริงๆ ที่ไม่มี Internet connection เลยก็จบประเด็นไป การ sync ไม่น่าจะยากอะไร ทำทีเดียวก้อนใหญ่ๆ ตอน online ก็ได้ การออกแบบก็ไม่น่าจะยากตามไปด้วย

    แต่ถ้ามองมันเหมือนเป็น cache ฝั่ง client นี่ปวดหัวกว่าเยอะเลยนะ เมื่อไหร่ต้อง cache เมื่อไหร่ไม่ต้อง ถ้าข้อมูลใน cache ไม่ทันสมัยแล้วทำไง (ให้ Gears ใช้ XMLHttpRequest ไป sync อัตโนมัติ?) แล้ว Cookies จะไม่ใช้แล้วใช่มั้ย?

    พี่เอี้ยก้วยข้อมูลใน Gears น่าจะมีชีวิตข้ามช่วงชีวิตของ browser นะ ไม่งั้นมันจะไม่มีประโยชน์เลย คิดดูถ้าพิมพ์งานอยู่ ซึ่งมันเป็นกระบวนการที่ใช้เวลาสูง แล้วปิด browser ไปทำอย่างอื่นไม่ได้มันตลกไปหรือเปล่า?

    คุณ redgene ขอบคุณสำหรับข้อมูลเรื่อง Gears ครับ ผมคงต้องไปอ่านเพิ่มแล้วละ

    ขอบคุณทุกคนครับ

    ความเห็น โดย deans4j — สิงหาคม 31, 2007 @ 2:29 am

  8. @redgene – ถ้าเป็น local server ก็เป็น proxy ดีๆ นี่เอง อาจจะตัดประเด็นเรื่องการ sync ไปได้ ปัญหาเหลืออยู่ว่าจะ transparent การใช้/ไม่ใช้ proxy นี้ยังไง

    คงต้องตามดูเทคโนโลยีนี้ต่อไปครับ ถ้าผมจำไม่ผิด Dojo หรือ YUI (ไม่ค่อยแน่ใจว่าตัวไหน) ก็มี db เหมือนกัน

    ความเห็น โดย deans4j — สิงหาคม 31, 2007 @ 2:44 am

  9. ครับ การใช้gearsกรณีที่เป็นcacheที่มาเก็บระบบที่client เลยมีผลกระทบไปถึง db layer เลย เช่น ข้อมูล master อาจจะต้องมีฟิลด์ที่เป็น versioning มาเพื่อcheckครับ นึ่ยังไม่รวมtable ที่ซับซ้อนอีก อีกอย่าง field type ของ sqlite กับทาง db serverอีกรู้สึก field type ของsqlite มันจะมีน้อยกว่า
    สรุปดังนั้นถ้าทำจริงเหมือนงานเพิ่ม2.5เท่า เพราะต้องมาcheckว่าจะเก็บtableไหนลงclient ส่วนไหน แค่ sync(read)จาก server ส่วนไหน sync(read/write) อึกอย่างกระทบ db layer ส่วน hibernate ก้อกระทบอีก เป็นทอดๆกันไป

    ความเห็น โดย redgene — สิงหาคม 31, 2007 @ 11:54 am

  10. ดีน : มึงรู้สึกมั้ย entry สาระ กูกะไอ้เก่งจะหายไป…..

    ความเห็น โดย plynoio — กันยายน 1, 2007 @ 5:27 pm


RSS feed for comments on this post. TrackBack URI

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

สร้างเว็บไซต์หรือบล็อกฟรีที่ WordPress.com.

%d bloggers like this: