MongoDB笔记0x01

2.5 MongoDB shell

MongoDB的shell包含Google的V8引擎,可以执行JavaScript代码,支持JavaScript标准库。打开shell时将会自动连接到本地的MongoDB服务器,也可以指定连接到远端的MongoDB服务器。此外,MongoDB的shell也提供一些方便的语法糖,供习惯于SQL shell的用户使用。

Read more
MongoDB笔记0x00

1 MongoDB简介

MongoDB是一个面向文档的数据库,与传统的关系型数据库不同,MongoDB中没有行的概念,取而代之的是文档中的内容和数组。这种形式可以灵活的表现各种复杂的层次关系,加快开发者开发进程。

Read more
建立docker镜像仓库

操作系统为CentOS 7。

Docker安装

安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

添加阿里源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker

yum install docker-ce

启动Docker

systemctl enable docker
systemctl start docker

registry安装

安装registry及运行

docker-registry本身也是docker镜像,从官方仓库拉取对应镜像。在仓库服务器上执行:

docker pull registry:2

运行该镜像:

docker run -d -p 5000:5000 --restart=always --name registry -v /var/data:/var/lib/registry registry:2

镜像拉取

在仓库服务器上上传本地镜像:


docker load < centos:1
docker tag centos:1 localhost:5000/centos:1
docker push localhost:5000/centos:1

在客户端通过HTTP访问仓库,需要先修改/etc/docker/daemon.json


{
  "insecure-registries":["192.168.59.137:5000"]
}

之后输入命令:


systemctl restart docker
docker pull 192.168.59.137:5000/centos:1

使用registry API

例如在不知道镜像名称以及版本号时,则需要向registry发起查询。此时可以使用registry提供的API。


import requests
url = 'http://192.168.59.137:5000/v2/'
r = requests.get(url + '_catalog')
print(r.text)
# {"repositories":["busybox"]}
r = requests.get(url + 'busybox/tags/list')
# {"name":"busybox","tags":["1.25.1-musl"]}


FluentPython笔记0x07

Mappings with Flexible Key Lookup(p70)

  • defaultdict:类似与dict.default(),可创建一个带有默认值类型的dict,例如defaultdict(int),则遇到不存在的Key时,其取值为0。这个过程中会调用default_factory,进而会调用special method __missing__

  • __missing__:该special method没有在dict中定义,但如果在dict的子类中定义__missing__,则__getitem__在遇到缺失的key时不会抛出KeyError,而是会转而调用__missing____missing__在其他时候不会被调用,例如__contains__

  • 例3-7:


class StrKeyDict0(dict):

    def __missing__(self, key):
        if isinstance(key, str):
            raise KeyError(key)
        return self[str(key)]

    def get(self, key, default=None):
        try:
            return self[key]
        except KeyError:
            return default

    def __contains__(self, key):
        return key in self.keys() or str(key) in self.keys()

有两处需要注意:
1.在__missing__中,isinstance的检查不可少。__missing__被调用时,情况有三种:(1)是int型,但其str型在dict中;(2)是int型,且str型不在dict中;(3)是str型但不在dict中。如果没有isinstance的过滤,str型也不在dict中时self[str(key)]还会调用__missing__,陷入死循环。
2.在__contains__中,没有使用key in dict而是用key in dict.keys()是因为前者依然会调用__missing__,而导致int型的2也会在dictkeys中。


PostgreSQL安装及初始化

参考:https://www.mtyun.com/library/28/how-to-install-postgresql9/
本文安装环境为CentOS 6.4,安装PostgreSQL版本为9.3

Read more
FluentPython笔记0x06

Chapter 3

Generic Mapping Types(p64)

  • 可哈希:如果一个对象在它的生命周期中有一个不会改变的哈希值(它需要有__hash__()函数),并且它能够和其他对象进行比较(需要有__eq__()函数)。可哈希的对象相等必须拥有相同的哈希值。strbytes以及数类型都是可哈希的;frozenset也总是可哈希的,因为它的元素必须可哈希;tuple仅当它包含的所有元素可哈希是它才是可哈希的。例:
Read more
FluentPython笔记0x05

NumPy and SciPy(p52)

  • numpy.ndarray的基础操作:
Read more
FluentPython笔记0x04

p32

  • 和列表相比,元组除了无法修改其中的值以外,只有一处和列表不同:元组无法使用__reversed__,但是可以使用以下方法代替:
Read more
FluentPython笔记0x03

唔,如果把这本书涉及到但是没提到的点拓展开,我什么时候能读完这本书呢?

p26

  • 元组不仅仅是不可变的列表,还可以存储记录。
Read more
FluentPython笔记0x02

嗯,记点单词。

p14

  • augmented assignment: 增量赋值,例i += 1
Read more