Tag: nosql

  • DevOpsQA NJ Meetup – NoSQL in Agile DevOps Model

    DevOpsQA NJ Meetup – NoSQL in Agile DevOps Model

    DevOpsQA NJ just held our October Meetup on NoSQL in Agile DevOps Model with Shawn McCarthy from MongoDB, Bhavna Sehgal from Syncsort and Suhas Joshi as speakers.   The venue was provided by ROKITT at a state-of-the-art office space with breathtaking views of NYC. IMG_4572

    Suhas, a Solutions Architect with a vast DevOps experience, gave a great introduction to NoSQL, starting with the history of the journey from relational to NoSQL and then deep diving into NoSQL Data Models including Key Value (e.g. CouchDB, Memcache), Document (e.g. MongoDB), Wide Column Store (e.g. Cassandra, HBase) and Graph (e.g. Neo4J). He alsoIMG_4576 touched upon big data saying that the term “big data” is a misnomer, it should be “huge data” instead.

    Bhavna gave a talk about how Syncsort clients leverage Hadoop and NoSQL database to achieve powerful results. Some of the use
    cases included mainframe data offload to Hadoop, query of large data sets and real time analytics on Hadoop.   Bhavna also covered various options for accessing NoSQL in Hadoop including JDBC/ODBC and Java API among others.

    IMG_4579Next, Shawn gave an exciting overview of MongoDB, starting with how it got started and deep diving into the functionality. MongoDB is a cross-platform document-oriented database. While MongoDB is classified as a NoSQL database, it also supports relational structures. Instead of breaking up data into multiple relational structures, MongoDB can store it in the small number of documents. Shawn went thru the reasons why divelopers like Mongo, which include the following 1) it was built by developers for developers, 2) very easy to setup, 3) availability, 4)automatic partitioning of data, 5) view of the data is abstracted out from the application. MongoDIMG_4571B does not have transactions or joints and should not be used for transaction based banking data, but it’s a great tool for storing log data, user profiles, user-generated content and location based data.   Shawn also covered Rich Query model and how Mongo can be used for real-time analytics. If you would like to learn more about MongoDB, you can reach Shawn at shawn.mccarthy@mongodb.com

    At the end we had a great Q&A session and a very warm open discussion.   Looking forward to our next session in November.

    IMG_9161_All

  • Does MariaDB replace the “M” in LAMP

    Does MariaDB replace the “M” in LAMP

    If you were starting a new application tomorrow, which backend would you use? Chances are you said MySQL. However post Oracle acquisition MySQL has changed. After Oracle purchased the code they broke the hearts of many. And there is hope that MySQL has re-invented itself in the form of MariaDB

    (more…)

  • SQL lovers fear not – NoSQL just got friendlier

    SQL lovers fear not – NoSQL just got friendlier

    Today Couchbase, the creator of an Enterprise NoSQL database server, announces N1QL ( pronounced Nickle) at their user conference. N1QL is designed to ease the pain for SQL developers when considering NoSQL, by creating a new query language to sit on top. It is essentially SQL for JSON documents.

    (more…)

  • SQL vs. NoSQL – Unsettled Debate & DevOps Pitfalls

    SQL vs. NoSQL – Unsettled Debate & DevOps Pitfalls

    Big Data, a relatively new phenomenon driving the industry hype-cycle is a mainstay in the database business. IT companies are convinced over the endless value proposition of the operational insight that comes with leveraging Big Data ( or Big Small Data ), so much so that it’s easy to overlook its impact on traditional database technologies and practices.

    (more…)

  • MongoDB 2.6: Most Significant Release of Mongo Yet?

    MongoDB announced the latest version of the popular NoSQL database yesterday, version 2.6.  I had a chance to speak with Kelly Stirman, Director of Product at Mongo about the release.  The release is chocked full of goodies for Mongo users.  For me chief among them was the new security features highlighted in the press release below. Also the MMS features make it much easier to run Mongo at scale.  One of the things Kelly spoke to me about was to make it easier for first time users to get MongoDB up and running. This is another thing addressed in 2.6.  You can see the full details below.

    Announcing MongoDB 2.6: A Quantum Leap for the World’s Fastest Growing Database

    MongoDB’s Most Significant Release to Date Brings Simplicity and Reliability to Operations, Complete Re-Architecting of Major Server Components and Enterprise-Grade Security

    NEW YORK and PALO ALTO, Calif.—April 8, 2014 – MongoDB today announced the general availability of MongoDB 2.6, the newest release of the database that defines the standard in modern application development. The release builds on five years of innovation and hundreds of thousands of deployments to simplify provisioning and operating MongoDB deployments, making the database developers love for building apps, the database organizations love to run.

    MongoDB makes building applications natural and intuitive – and this release makes it just as natural to run these apps, freeing up the most valuable assets of any organization to innovate and move the world forward, one app at a time.

    “The core of MongoDB has served the community well for the past five years,” said Eliot Horowitz, co-founder and CTO of MongoDB. “In 2007, we set out to prove that a new data model could fundamentally improve the way developers build and run applications. Now we move the industry forward with a management service that improves the way we run apps, allowing organizations to focus on what they do best. We have the opportunity to engineer the primary data management system used for decades. This is a massive task, but we have the community, the engineering talent and the funding necessary to deliver on the promise of what is before us.”

    “This release moves the way we build and run apps an enormous step forward. We are introducing automation features to MMS, now in testing with select users. Over the past two years more than 35,000 members of the community have come to rely on MMS. Users can now provision, upgrade and manage their systems through a simple yet sophisticated interface. Operating MongoDB is now more reliable and effortless than ever before. We have improved the scalability of several critical areas of the database, and completed fundamental changes to the core that will allow us to improve concurrency in MongoDB 2.8 and beyond. We reduced the effort to add some classes of new features by 100x, built a sophisticated query planner with immense potential for further innovation, redesigned write operations and dramatically simplified the maintenance of MongoDB. This is our biggest release ever.”

    With text search, enterprise-grade security and best-in-class analytical capabilities, MongoDB 2.6 enables new classes of use cases. Key features of the release include:

    MMS – MongoDB Management Service simplifies how organizations run MongoDB systems at scale. MMS now includes continuous, incremental backup; point-in-time recovery; monitoring, visualization and alerts on 100+ parameters; on-prem deployments for MongoDB subscribers and a fully-managed solution in the cloud. Alpha features include simple, single-click provisioning and hot upgrades.

    Index Intersection – Index intersection provides more flexible, adaptive analytical capabilities, making it easier to run ad-hoc analyses to answer evolving business questions. Developers no longer need to predict all data access patterns in advance as more than one index can be used to optimize a query.

    Improved Scalability & Performance – Organizations can scale more easily and at lower cost. MongoDB 2.6 provides more efficient use of network resources; oplog processing is 75% faster; classes of scan, sort, $in and $all performance are significantly improved; and bulk operators for writes improve updates by as much as 5x.

    Text Search – Users have come to expect search as a primary means of accessing data in apps. Developers can now deliver search as a feature without the added complexity of a separate, dedicated search engine. MongoDB 2.6 integrates text search into the MongoDB Query Language and the Aggregation Framework, and provides powerful search for 15 languages.

    Enterprise Security – Securing data is a top priority for many organizations, and MongoDB 2.6 provides best-in-class security functionality. Building on the support in MongoDB Enterprise 2.4 for roles, Kerberos authentication and SSL encryption, MongoDB Enterprise 2.6 adds field-level redaction, customizable auditing, LDAP and x509 authentication, collection-level authorization and user-defined roles.

    Bulk Update Operators – Organizations can now manipulate large data volumes more efficiently than ever before. New bulk operations make it simple and efficient to load, update and delete large volumes of data in MongoDB. Bulk operations automatically parallelize updates across the system, and return a report of failed operations that can be retried by the application.

    Pipelined Data Transformations – Data can be summarized, enhanced, aggregated and refined to better serve users from within the database. MongoDB 2.6 provides multi-step data enrichment and transformations natively in the database using a simple declarative interface. With the new $out stage, results sets from the aggregation pipeline can be written to a named collection with no limit to the output size.

    Simplified Operations – MongoDB 2.6 simplifies and lowers the cost of operating MongoDB at scale. Indexing can beperformed in the background, yielding to foreground operations and auto-resumes after restart; with MaxTimeMS operators and developers can specify auto-cancellation of queries, providing better control of resource utilization; mixed SSLconnections; expanded SNMP support; more efficient repair operations; and a new default space allocation configuration provides more predictable performance.

    “In five short years, the MongoDB community has transformed the data management landscape, creating the first compelling alternative to 40 years of relational databases,” said Max Schireson, CEO of MongoDB. “We have created a new and liberating data model, demonstrated mass appeal, significantly improved how engineers build and run modern applications, and secured funding to ensure MongoDB continues for decades to come. With this release we have made massive investments in the database to ensure a strong foundation for continued innovation.”

    MongoDB has a thriving global community with more than 7 million downloads of its open-source database, 1,000 customers, 150,000 online education registrations, 30,000 user group members and 20,000 MongoDB Days attendees.

    Register today for MongoDB World and join developers, ops professionals and executives from all over the world at the largest MongoDB event ever, June 23-25 in New York City.

    Supporting Quotes
    “Release 2.6 is an important milestone. It is packed with many new features and incremental improvements across the board. It removes the 16MB output limit in the Aggregation Framework for querying Big Data. We can now build efficient, complex data processing workflows as 2.6 allows the result of an aggregation pipeline to be stored in another collection directly, without sending it all the way to the client. Additionally, the new wire format and batch APIs enable more efficient client driver implementations, including a more streamlined async API that improves client-side throughput. We are looking forward to continuing innovation and steady execution at MongoDB.” – Yuri Finkelstein, Enterprise Architect, eBay

    “MMS is like a heartbeat, you simply can’t live without it. It is easy to get started with – the installation is really logical and the overall learning curve is quite minimal. If you are playing with sharded clusters in production, you really need MMS.” – Janne Keskitalo, Senior System Manager at Polar

    “MMS is an essential component in our MongoDB tool chain. Monitoring gives us all the insights into MongoDB that we need to make sure all our customers’ systems are healthy. It also helps us to see upcoming issues so that we then can proactively reach out to our users. The backup features integrate seamlessly with the monitoring. We love the great flexibility it gives us with custom snapshots, point-in-time recoveries and most of all, consistent backups across sharded systems.” – Johannes Brandstetter, Chef de Cuisine, MongoSoup

    Resources
    – Register today for MongoDB CTO Eliot Horowitz’s ‘What’s New in MongoDB’ webinar
    – Run MongoDB with confidence, set up your free MMS account today
    – View a demo of MMS’ automation features
    – Download the ‘What’s New in MongoDB 2.6’ whitepaper
    – Release Notes for MongoDB 2.6
    – Sign up for MongoDB University’s free online courses

    About MongoDB, Inc.
    MongoDB makes development simple and beautiful. For tens of thousands of organizations, MongoDB provides agility and the freedom to scale. Fortune 500 enterprises, startups, hospitals, governments and organizations of all kinds use MongoDB because it is the best database for modern applications. Through simplicity, MongoDB changes what it means to build. Through openness, MongoDB elevates what it means to work with a software company.

  • MongoDB Needs and Loves DevOps

    MongoDB Needs and Loves DevOps

    DevOps is about more than just running infrastructure smarter, with more automation. It’s a means to engineering agile, robust, and modern software by blending the traditionally siloed areas of administration and development. This means infrastructure as code, and developer concern for operations. It means more than calling sysadmins “DevOps Engineers”; it means operators and developers working together seamlessly. NoSQL in general is a solution that by it’s nature loves DevOps, and it thrives under teams that take a DevOps approach, but it can really hurt you if you do not. MongoDB is no exception to this rule. It has gained enormous traction in the developer community by blending flexibility, features, and performance. Some teams have been seduced by the ease with which they set up MongoDB for development, and neglect to think about capacity planning, tuning, monitoring, and maintenance. Do not let this happen to you! Or you will pay the price at 3am when you are scrambling to figure out why your swell app has ground to a halt. Instead, take the time to learn MongoDB’s needs and capabilities, because it doesn’t just make development easy, it can truly sweeten operations with things like hassle-free replication and full access to administrative tasks via the same API used to perform data access. Let’s have a look at MongoDB from a DevOps perspective.

    DevOps Wants:

    Clueful administrators.

    There isn’t much room in the DevOps movement for system administrators who don’t speak at least one high-level language. I personally find Ruby most appealing to to me for systems programming, but Python is also a fine choice. MongoDB admins should be practiced at performing administrative tasks in both the javascript shell and the programming language of their choice, setting the stage for a rich infrastructure monitoring and automating codebase. Administration best practices are extensively, if not exhaustively, documented in the administration docs, so start there. Pay particular attention to the Operational Strategies section of the manual, which provides a checklist of concerns you should address as you plan your system’s design and deployment.

    Developers who know the ramifications of their infrastructure.

    The age of throwing applications over the wall to operations is mercifully drawing to a close. Developers must understand the nature of their infrastructure, how to best utilize it, and how it handles failures. MongoDB affords developers the ability to code to infrastructure details without coupling to particular instances, or even hostnames. In this, tags, write concerns, and read preferences are your friends. Code that runs reports (which should be kept away from your production instances) can specify that it will read only from instances tagged as “reporting”. Admins can add instances tagged as ‘reporting’, or swap which instances have that tag, with a few lines of code. Refer to the end of this article for example code.

    Infrastructure state to alert cleanly, and for trends to be visualized.

    The MongoDB Monitoring manual section provides an overview of the ways to monitor your instances, including 3rd party solutions, both self-hosted and SaaS. MongoDB Management Service is MongoDB, Inc.’s free monitoring, trending, and alerting service, which you should set up from day one to monitor every single instance you rely on.

    Infrastructure to be programmable.

    Ok, you are monitoring your instances, why not work on automating your infrastructure to respond to faults and load requirements? While MMS is a no-brainer, it’s not going to plug into your infrastructure code. You can roll your own integration using MongoDB’s handy exposure of its internals via database commands, and for replication, the local database. For example, you can check on replica set lag in Python like so:

    import pymongo
    # three mongods running on my laptop
    c = pymongo.MongoReplicaSetClient(
        'Kusanagi.local:29017,Kusanagi.local:29018,Kusanagi.local:29019',
        replicaSet='test'
    )
    
    rs_status = c.admin.command('replSetGetStatus')
    
    lag_threshold = 120 # up to two minutes of replica lag is ok for this example
    primary_optime = [ member['optime'].as_datetime()
        for member in rs_status['members'] if member['state'] == 1 ][0]
    secondary_optimes = [ member['optime'].as_datetime()
        for member in rs_status['members'] if member['state'] == 2 ]
    for secondary_optime in secondary_optimes:
        if ( (primary_optime - secondary_optime).total_seconds > lag_threshold):
            # do stuff

    Provisioning MongoDB instances programmatically on Amazon EC2 is easy with the official AMIs, but automating MongoDB infrastructure goes beyond that. Learn to use the database commands to configure replica sets, because you can script joining new instances to a set. If you use sharding, you can update tag ranges for sharded clusters to migrate chunks to shards specifically provisioned to warehouse data.

    Disaster recovery to be robust and automated.

    There are numerous ways to back up MongoDB, and the one you pick should be appropriate for your deploy. So read through your options in the backups section of the MongoDB Manual. You should probably read that section twice.

    To aid in release management.

    By being schema-free, MongoDB frees enterprises from the hassles of schema alterations and their attendant maintenance windows. Instead of altering a user table to include a new column for “birthplace”, a new release of your application will just begin to write the user document with that attribute included. Naturally, your user profile rendering will not assume this value is set and throw an exception, it will just not display “birthplace”. This does not excuse you from change management! In a DevOps shop, everything about monitoring that applies to production applies to your integration environment, which I sincerely hope is continuous. Configure all the monitors you’d have in production, and alert developers when metrics go out of range.

    Closing Thoughts

    In a DevOps culture, admins read code, developers plan infrastructure, and they both attend the same planning meetings. Engineers who work with MongoDB, both in operations and development, should read the WHOLE manual. If your developers read the development section and your admins read the administration section, you’re really only doing Dev and Ops.

    Example Code – Tags

    Tagging an instance of a replica set looks like this in the MongoDB shell:

    test:PRIMARY> config = rs.config()
    {
        "_id" : "test",
        "version" : 2,
        "members" : [
            {
                "_id" : 0,
                "host" : "Kusanagi.local:29017"
            },
            {
                "_id" : 1,
                "host" : "Kusanagi.local:29018"
            },
            {
                "_id" : 2,
                "host" : "Kusanagi.local:29019"
            }
        ]
    }
    test:PRIMARY> config.members[0].tags = { "use": "production" }
    { "use" : "production" }
    test:PRIMARY> config.members[1].tags = { "use": "reporting" }
    { "use" : "reporting" }
    test:PRIMARY> config.members[2].tags = { "use": "production" }
    { "use" : "production" }
    test:PRIMARY> rs.reconfig(config)
    Fri Mar  7 18:35:25.040 DBClientCursor::init call() failed
    Fri Mar  7 18:35:25.042 trying reconnect to 127.0.0.1:29017
    Fri Mar  7 18:35:25.042 reconnect 127.0.0.1:29017 ok
    reconnected to server after rs command (which is normal)

    Here’s Ruby code, assuming the same config:

    require 'mongo'
    
    # I'm running 3 mongods on my laptop
    rset = Mongo::MongoReplicaSetClient.new(["Kusanagi.local:29017",
                                            "Kusanagi.local:29018",
                                            "Kusanagi.local:29019"])
    
    # using the local db to get current config
    config = rset['local']['system.replset'].find_one() 
    admin_db = rset['admin']
    config['members'][0]['tags'] = { "use" => "production" }
    config['version'] += 1  # mongod avoids reconfig conflicts by insisting on an increasing version value
    verify_version = config['version']
    begin
        admin_db.command({ 'replSetReconfig' => config })
    rescue Mongo::ConnectionFailure # expect your connection to close during this operation
        actual_version = rset['local']['system.replset'].find_one()['version']
        raise unless actual_version == verify_version
    end

    Specifying tag sets only applies to reads from secondaries (since there is only one primary to choose from). In Ruby, it looks like this:

    rset = Mongo::MongoReplicaSetClient.new(["Kusanagi.local:29017",
                    "Kusanagi.local:29018", "Kusanagi.local:29019"])
    analytics = rset['analytics']  # say we have an 'analytics' DB
    cursor = analytics['page_views'].find({'page' => 'home'},
                                            :read => :secondary,
                                            :tag_sets => {:use => 'reporting'})

    This query specifies, with the :read option, that only secondaries should answer, and with the :tag_sets option, that only secondaries tagged with 'use': 'production' can be used. If I were to shut down members[0] (Kusanagi.local:29017) while it was primary, and members[1] (Kusanagi.local:29018) became primary, the above query would fail, because as primary it’s no longer eligible to answer queries directed at secondaries, even though member 1 is tagged as use: 'production'. This is exactly what you want, to keep your reporting queries from hosing your production instance. After taking stock of the situation, you might decide to assign 'use': 'reporting' to member 3, and the above query would then again work. Note that the MongoReplicaSetClients created by the Ruby driver do not by default refresh replica set state (as of v1.9.2), they use the config that was present when the connection was established (this is not the case for all drivers, make sure you determine your driver’s behavior). This means that if you reassign tag values, existing connections will not notice the change. If I were to change the tags for member 1 to 'use': 'not reporting', the above query would not fail, it would route the query right to member 1. So if you are using tagging, and Ruby, instantiate your client with the refresh_mode option:

    rset = Mongo::MongoReplicaSetClient.new(["Kusanagi.local:29017",
                "Kusanagi.local:29018", "Kusanagi.local:29019"],
                :refresh_mode => :sync)

    See the MongoReplicaSetClient documentation for details. The Python driver handles this by launching a background process to monitor Replica Set health and config changes, but the API does not document any means to configure its polling interval.