MongoDB Topazsocial CRM
Upcoming SlideShare
Loading in...5

MongoDB Topazsocial CRM






Total Views
Views on SlideShare
Embed Views



3 Embeds 62 54 7 1



Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

MongoDB Topazsocial CRM MongoDB Topazsocial CRM Presentation Transcript

  • MongoDB Schema Design Concepts for a Social CRM System Ashwin Mangale CTO, Vector Brook Presented at MongoDB Pune, Oct. 21, 2012
  • Talk Outline ● MongoDB Schema Basics Recap ● Topaz Social CRM Overview ● Data Model Overview ● Interactions ● Service Cases ● Forums ● Content Marketing Pages ● Conclusions
  • MongoDB Schema Basics Recap ● Document: JSON object (1 or more name:value pairs) ● Name is a string, value can be of foll types (dependent on driver/language): String, Symbol, Integer, Float, Boolean, Date, Array, ObjectId, Document ● A collection consists of one or more documents ● Loosely: Document ~ row and collection ~ table in a relational system
  • MongoDB Schema Basics (Contd.) ● Relational algebra defines concept of a join ● No concept of join with documents and collections ● Relations between collections come down to a decision between link vs embed ● Embedding allows atomic updates of outer and embedded entity ● 1-many relations ● Array ● Embedded document ● Links between collections ● Many-many relations ● Links between collections
  • Topaz Social CRM Overview ● Open Source ● ● GNU Affero General Public License (AGPL) ● Technology Stack ● Ruby/Rails 3.2 ● MongoDB ● Twitter Bootstrap ● Philosophy ● Simplicity: Keep code simple and gem dependencies to minimal ● Lightweight: Focus on common use cases
  • Topaz Social CRM Overview (Contd.) ● CRM Evolution ● From systems of record to systems of engagement ● Earlier, focus of the CRM system was on storing data about customers, service cases, leads, opportunities ● With the growth of social media, focus is shifting to capturing information about customer engagement ● Concept of Interaction ● Captures each interaction with a prospect/customer ● Focus of the system is on the interactions ● Interactions happen within the context of well-known CRM entities ● Allows for a better understanding of customer needs, leading to a overall better customer experience
  • Topaz Social Data Model Overview
  • Topaz Social Data Model Overview (Contd.) ● Customer details: cust_accounts, cust_sites, cust_contacts ● User details: users (with roles) ● Customer engagement details: interactions ● Service cases: service_cases, service_case_logs ● Forums: forum_categories, forums, forum_topics ● Content marketing: cm_page_categories, cm_pages
  • Interactions ● Interactions are central to the system ● Each interaction/engagement with the customer/prospect is recorded within the appropriate context ● Interactions are stored in a separate collection, and are linked from the contextual entity (eg. forum_topics and service_cases) ● Decision to store interactions in their own collection, versus embedding in the contextual entity: primarily to allow for queries to be run directly on interactions, and not have to always access through the contextual entity
  • Service Cases ● service_case is used to store information about customer problems/questions etc. ● Interactions with the customer are linked to the service_case entity ● service_case_log entity stores updates made by employees as they work on the case and are not visible to the customer ● The service_case_logs entity is embedded in the service_cases entity, since the logs are always accessed from the service_case, and never directly.
  • Service Case - JSON ● { "_id" : ObjectId("5082dc72def2c908fa000060"), "name" : "Prod1 not working", "assigned_to" : ObjectId("5082d88cdef2c908f6000001"), "service_case_logs" : [ { "_id" : ObjectId("5082dcc6def2c908fa00008c"), "user_id" : ObjectId("5082d88cdef2c908f6000001"), "log_text" : "Gave update to cust" } ], "customer_account_id" : ObjectId("5082d94ddef2c908fa000008"), "priority" : 1, "created_by" : ObjectId("5082d88cdef2c908f6000001"), "solution" : "", "description" : "Prod1 not working", "status" : "Open" }
  • Service Case Interaction JSON ● { "_id" : ObjectId("5082dcb8def2c908fa000081"), "context_id" : ObjectId("5082dc72def2c908fa000060"), "context" : "ServiceCase", "body" : "Cust wants status update", "user_id" : ObjectId("5082d88cdef2c908f6000001") }
  • Forums ● forum_categories and forums are each stored as separate collections, with appropriate links ● forum_topics are embedded within forums ● Interaction entity used to store the actual posts in the forums by users ● Each interaction is within the context of a forum_topic, and is linked to the topic
  • Forum JSON ● { "_id" : ObjectId("5082fd6ddef2c90fe9000008"), "name" : "Product Issues", "description" : "Product Issues", "forum_category_id" : ObjectId("5082da0ddef2c908fa000027"), “forum_topics”: [{ "_id" : ObjectId("5082fd8cdef2c90fe9000012"), "title" : "Product display not clear", "user_id": ObjectId("5082d88cdef2c908f6000001"), }, { "_id" : ObjectId("5082dd08def2c908fa0000a1"), "title" : "Product does not work", "user_id": ObjectId("5082d88cdef2c908f6000001"), } ] }
  • Forum Post (Interaction) JSON ● { "_id" : ObjectId("5082fdb3def2c90fe900001e"), "parent_context_id" : ObjectId("5082fd6ddef2c90fe9000008"), "parent_context" : "Forum", "context_id" : ObjectId("5082fd8cdef2c90fe9000012"), "context" : "ForumTopic", "user_id" : ObjectId("5082d88cdef2c908f6000001") }
  • Content Marketing Pages ● To facilitate inbound marketing, the system allows creation of content marketing pages ● The cm_pages are organized within cm_page_categories, each of which are separate collections ● cm_page_categories can be nested (tree) ● Links between cm_pages and cm_page_categories can be established ● Possible to change category names, and category hierarchy efficiently, without impacting the cm_pages ● Interactions can be created in the context of a cm_page
  • Customer Details ● cust_accounts ● cust_sites ● cust_contacts ● Decision to embed cust_sites and cust_contacts within the cust_account document
  • Customer Account JSON ● { "_id" : ObjectId("5082d94ddef2c908fa000008"), "name" : "Fantastico Corp", "customer_sites" : [{"_id" : ObjectId("5082d94ddef2c908fa000009"), "name" : "HQ", "description" : "Worldwide HQ", "address_line1" : "100 Broadway", "state" : "New York" "city" : "New York", "country" : "United States", "zipcode" : "10001", [ { "customer_contacts" : [ { "_id" : ObjectId("5082d94ddef2c908fa00000a"), "email_addr" : "", }, { "_id" : ObjectId("5082d963def2c908fa000012"), "email_addr" : "", } ], } ] } ] }
  • Summary ● We describe how a MongoDB based document is used to design and implement a Social CRM system ● Capturing customer interactions efficiently is central to the design of Social CRM systems ● The interactions happen within the context of other CRM entities such as service cases, forums, and content marketing pages ● Access patterns are the key drivers to design decisions of whether to embed or link