Mongo DB跟踪DDL的变化

时间:2017-06-30 10:54:31

标签: mongodb schema ddl

我是Mongo DB的新手。我来自RDBMS / MPP / ETL背景,我使用的大部分数据存储都有关于对象的元数据(表视图等)。我怀疑是Mongo DB特有的。它有它任何数据字典,如Oracle user_tables或任何其他有关集合的元信息,最后DDL更新时间,因为MongoDB是一个模式较少的数据库,应用程序可以在没有模式更改的情况下更改插入数据。因此,当存在MongoDb时,在运行ETL作业之前找到任何结构更改很重要我搜索了字典或任何跟踪DDL变化的API信息,但没有发现任何内容。任何人都可以引导我查看与此相关的链接或信息。如果没有这样的选项,那么有更好的最佳做法可以遵循以避免这种模式演变

由于 Anoop R

2 个答案:

答案 0 :(得分:0)

使用Mongodb的一个优点是它的架构较少的存储文档结构。现在,与RDBMS表字典不同,该模式存在于MongoDb用户的应用程序层中。这使得应用程序可以灵活地设计/更改模式,无需等待任何alter语句依赖项。

已经说过Mongodb 3.2引入了模式验证,并且3.4丰富了它。您可以在Mongodb document validation了解有关验证的详情。验证规则是使用validator选项在每个集合的基础上指定的,该选项采用指定验证规则或表达式的文档。

关于模式验证的注意事项不是跟踪ddl的变化,而是建立一个商定的定义,可以这么说。

答案 1 :(得分:-1)

我得到了一个实际上并不是我想要的解决方案但是我认为我们可以使用它来管理.`

数据类型的默认检查表

key_type_default_count = {
    int: 0,
    float: 0,
    str: 0,
    bool: 0,
    dict: 0,
    list: 0,
    set: 0,
    tuple: 0,
    None: 0,
    object: 0,
    unicode: 0,
    "other": 0,
}

获取mongo连接的自定义代码

client = create_mongo_con(v_env,v_con_name)
print client

db = client[v_db_name]
collection = db[v_collection]

主要代码

key_type_count = defaultdict(lambda: dict(key_type_default_count))


mongo_collection_docs = collection.find({},{"_id":0}).limit(30)
#print mongo_collection_docs'
print type(mongo_collection_docs)

for doc in mongo_collection_docs:

    for key, value in doc.items():
        print ' my key '+str(key)
        print 'my value is '+str(value)
        print ' my value type '
        print type(value)
        if type(value) in key_type_count[key].keys():
            key_type_count[key][type(value)] += 1
        else:
            key_type_count[key]["other"] += 1
    total_docs += 1`

你可以从我得到这个想法的地方更多地了解这个https://github.com/nimeshkverma/mongo_schema但是那个代码不起作用。我编辑了一些部分,现在我能够生成一个像这样的漂亮输出 enter image description here

但是现在我面临一个问题,所有的字符串字段被检测为unicode。我需要弄明白这将发布如果我们得到一个解决方案。如果任何人在python中遇到与str和unicode相同的问题请发表评论