热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

django和MongoDB

balabalaNoSQLMongoDB一个无任何特点的教师,他教导的学生不会有任何特点。今朝NoSQL还没有一个标准的定义,最常见的申明是non-relational,也有很多人申明为“NotOnlySQL”。NoSQL凡是意味着非关系型、分布式的数据存储,具备大数据量下的高机能,横
bala bala NoSQL & MongoDB
一个无任何特点的教师,他教导的学生不会有任何特点。今朝NoSQL还没有一个标准的定义,最常见的申明是"non-relational",也有很多人申明为“Not Only SQL”。NoSQL凡是意味着非关系型、分布式的数据存储,具备大数据量下的高机能,横向扩大才能,以及灵活的数据模型。也许,还意味着开源。
浪费时候就是自尽,尤其是浪费歇息的时候,直接威逼着生命。MongoDB是一种以文档情势存储的NoSQL。其首要的特点:
API: BSON
Protocol: lots of langs
Query Method: dynamic object-based language & MapReduce
Replication: Master Slave & Auto-Sharding
Written in: C++
Concurrency: Update in Place
Misc: Indexing, GridFS Links

Django对NoSQL的支撑
是的,Django将原生支撑NoSQL,然则不是如今。
你可能据说过django-nonrel 。即Django none relationship,非关系型的Django。django-nonrel供给了一层adapter,共同特定的backend,可以连接各类NoSQL。比如连接MongoDB的django-mongodb-engine。然则,django-nonrel 的实现是在内存中模仿SQL数据库操纵,这种思路没有获得Django核心的支撑,所以只能是一个外部版本。
query-refactor是GSoC(Google Summer of Code)的Django项目之一,已经进入Django的官方分支。query-refactor的作者Alex早已发布了query-refactor的“终极状况”。然则,因为该分支的完成时候与Django1.3的公布时候过于接近,所以没有赶上,在Django1.4的新特点清单docs.djangoproject.com—1.4中也没有找query-refactor的身影。若是有消息通晓人士不妨泄漏一下。
注:Alex并不是无名小卒,我们知道Django在1.2之前是不支撑多半据库的,恰是因为Alex的尽力,我们才干享用Django的多半据库特点。

Django + MongoDB的决定
最直接的体式格式是应用PyMongo——MongoDB供给的Python Driver。然则用惯了Django的Model层,其实不肯意本身去保护数据库连接,写一大堆CRUD的语句。
而django-nonrel,如前所述,未必是一个好的选择。同样的原因,django-mongodb-engine是基于django-nonrel的MongoDB backend实现,也不予推敲。
MongoEngine,在Django官方的支撑出来之前,我认为这是最好的选择。因为MongoEngine可以供给与Django Model(ORM)很是类似的体验,可以快速上手。看一下官网首页的例子:  mongoengine import *                           # To define a schema for a 
# document, we create a 
class Metadata(EmbeddedDocument):                   # class that inherits  
tags = ListField(StringField())                 # Document. 
revisions = ListField(IntField())               #
# Fields are specified by 
class WikiPage(Document):                           # adding field objects as 
title = StringField(required=True)              # class attributes to the 
text = StringField()                            # document class. 
metadata = EmbeddedDocumentField(Metadata)      # 
# Querying is achieved by 
>>> page.title = “Hello, World!”                    # calling the objects 
>>> for page in WikiPage.objects:                   # attribute on a document 
>>>     print page.title                            # class.

Django+MongoEngine 起首安装MongoEngine(依附pymongo)。之后在python shell中实验一下:
 mongoengine import *
connect(""employeeDB"")
class Employee(Document):
name = StringField(max_length=50)
age = IntField(required=False)
john = Employee(name="John Doe", age=25)
john.save()
jane = Employee(name="Jane Doe", age=27)
jane.save()
for e in Employee.objects.all():
print e["id"], e["name"], e["age"]
在Django中应用也很轻易,只需在models.py(若是你十分介怀,也可以零丁放在docs.py中)如许写:
 mongoengine import *
mysite.settings import DBNAME
connect(DBNAME)
class Employee(Document):
name = StringField(max_length=50)
age = IntField(required=False)
此中,DBNAME在settings.py中指定。
然后,在视图中就可以应用“文档模型“了。

其他
1.Mongo Engine的Field类型与Django ORM的Field类型有所不合,下面是一个简单的对比: 
MongoEngine Django
StringField CharField
URLField URLField
EmailField EmailField
IntField IntegerField
FloatField FloatField
DecimalField DecimalField
BooleanField BooleanField
DateTimeField DateTimeField
EmbeddedDocumentField --
DictField --
ListField --
SortedListField --
BinaryField --
ObjectIdField --
FileField FileField
2.尽管看起来像是ORM,但MongoDB绝对不是RDB。我想MongoEngine如许的设计是为了便利上手,然则应用的时辰,必然要遵守NoSQL的体式格式去思虑题目。
苏霍姆林斯基
推荐阅读
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 本文将深入探讨MySQL与MongoDB在游戏账户服务中的应用特点及优劣。通过对比这两种数据库的性能、扩展性和数据一致性,结合实际案例,帮助开发者更好地选择适合游戏账户服务的数据库方案。同时,文章还将介绍如何利用Erlang语言进行高效的游戏服务器开发,提升系统的稳定性和并发处理能力。 ... [详细]
  • 前两天有位朋友邀请我回答个问题,为什么MongoDB(索引)使用B-树而Mysql使用B+树?我觉得这个问题非常好,从实际应用的角度来学习数据结构,没有比这更好的方法了。因为 ... [详细]
  • Hadoop的分布式架构改进与应用
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • 本文详细记录了 MIT 6.824 课程中 MapReduce 实验的开发过程,包括环境搭建、实验步骤和具体实现方法。 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
author-avatar
主播新鲜看连
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有