2014年12月14日星期日

wp8.1 Study10:APP数据存储 - NEIL_X

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
wp8.1 Study10:APP数据存储 - NEIL_X  阅读原文»

一、理论

1、App的各种数据在WP哪里的?

下图很好介绍了这个问题。有InstalltionFolder, knownFolder, SD Card...

2、一个App数据存储概览

主要分两大部分,InstallationFolder和App Data Folder

3、Windows.Storage.ApplicationData 和 Windows.Security.Credentials简述

其中利用Windows.Storage.ApplicationData,我们可以获得3种不同的wp中文件夹和2种设置保存字典,C#操作如下

Windows.Storage.StorageFolder roam = Windows.Storage.ApplicationData.Current.RoamingFolder;
Windows.Storage.StorageFolder local
= Windows.Storage.ApplicationData.Current.LocalFolder;
Windows.Storage.StorageFolder temp
= Windows.Storage.ApplicationData.Current.TemporaryFolder;

Windows.Storage.ApplicationDataContainer localSettings
= Windows.Storage.ApplicationData.Current.LocalSettings;
Windows.Storage.ApplicationDataContainer roamingSettings
= Windows.Storage.ApplicationData.Current.RoamingSettings;

二、Local Folder 和 Local Setting

1、LocalSetting使用,C#代码如下:

// Create a simple setting
localSettings.Values["exampleSetting"] = "Hello Windows";

// Read data from a simple setting
Object value = localSettings.Values["exampleSetting"];

if (value == null)
{
// No data
}
else
{
// Access data in value
}

// Delete a simple setting
localSettings.Values.Remove("exampleSetting");

2、LocalFolder使用,C#代码如下:

private async void writeTextToLocalStorageFile(string filename, string text)
{
var fold = Windows.Storage.ApplicationData.Current.LocalFolder;//打开文件夹
StorageFile file = await fold.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);//创建个文件
await FileIO.WriteTextAsync(file, text);//在文件里面写内容
}

private async Task<string> readTextFromLocalStorage(string filename)
{
var fold = Windows.Storage.ApplicationData.Current.LocalFolder;//打开文件夹
StorageFile file = await fold.GetFileAsync(filename);//打开对应的文件
string result = await FileIO.ReadTextAsync(file);//读取文件里面的内容
return result;
}

Note:这里对文件的操作是十分简单的,步骤是在电脑管理文件的步骤是类似的。

三、Roaming Setting 和Roaming Folder

如果用户在多个设备上安装了你的程序,如果所有的设备可以共享相同的设置信息是很好的体验。而Roaming data提供了一个应用程序可以在多个不同的物理设备同步数据和设置方法。它以一个文件夹和设置字典的形式自动存储在用户的OneDrive。Roaming data的大小限制于ApplicationData.RoamingStorageQuota(一般是100k左右,但它不会占用你Onedrive的空间大小)。其同步过程图如下:

  Roaming Setting 和Roaming Folder的操作方式与上面的Local Folder 和 Local Setting操作方式一样,在这不一一介绍。但是需要在不同设备中监视Roaming data的改变事件。C#代码如下:

Windows.Storage.ApplicationData.Current.DataChanged += Current_DataChanged;
...

void Current_DataChanged(ApplicationData sender, object args)
{
// Refresh your settings...
}

  数据的同步是发生在后台的。

四、几种不同方式获取文件的方式


本文链接:wp8.1 Study10:APP数据存储,转载请注明。

MongoDB管理 - 田小计划  阅读原文»

前几篇文章都是从开发和使用的角度了解了MongoDB的各个知识点,这篇文章将从MongoDB管理的角度入手,了解MongoDB管理所要了解的基本知识。

数据库命令

在前面几篇文章中,已经接触了一些数据库命令,例如文档、索引的操作。

在MongoDB shell中,可以使用runCommand()来传入并执行一个命令文档。例如

> db.runCommand({"getLastError":1})
{
"n" : 0, "connectionId" : 1, "err" : null, "ok" : 1 }
>

MongoDB中的命令其实是作为一种特殊的查询来实现的,这些查询针对$cmd集合来执行。runCommand仅仅是接受命令文档,执行等价的查询操作。所以上面的操作等价于

> db.$cmd.findOne({"getLastError":1})
{
"n" : 0, "connectionId" : 1, "err" : null, "ok" : 1 }
>

但是,“db.$cmd.count()”的结果却总是为0,不知道是不是用户没有权限查看。

通过db.runCommand({"listCommands":1})可以得到MongoDB支持的命令集合。

通过db.help(),可以得到跟数据库相关的命令集合,例如添加删除用户,显示数据库名称,显示所有的collection等等。

> db.help()
DB methods:
db.addUser(userDocument)
db.adminCommand(nameOrDocument)
- switches to 'admin' db, and runs command [ just calls db.runCommand(...) ]
db.auth(username, password)
db.cloneDatabase(fromhost)
db.commandHelp(name) returns the help
for the command
db.copyDatabase(fromdb, todb, fromhost)
db.createCollection(name, { size : ..., capped : ..., max : ... } )
db.currentOp() displays currently executing operations
in the db
db.dropDatabase()
db.eval(func, args) run code server
-side
db.fsyncLock() flush data to disk and lock server
for backups
db.fsyncUnlock() unlocks server following a db.fsyncLock()
db.getCollection(cname) same as db[
'cname'] or db.cname
db.getCollectionNames()
......

服务器状态监控

作为管理员,一定要监控服务器的运行状态。在MongDB中,有三种方式进行服务器状态监控

  1. MongDB服务器启动时,会一个简单的http服务器,http服务器的端口是MongDB服务器端口加1000.

    注:如果启动MongDB服务时,加上"--rest"选项,就可以使用状态监控页面中的链接,查看命令列表,查看副本集状态等等

  2. 在MongoDB shell中,可以通过运行"db.runCommand({"serverStatus ":1})"命令来查看MongoDB服务器的当前状态。

    通过serverStatus命令得到的是一个静态结果。结果中的字段含义请参考MongoDB文档。

  3. 在MongoDB的bin文件夹中,有一个"mongostat.exe"程序,通过这个程序可以得到MongoDB服务器的实时状态。

    通过"mongostat.exe --help"可以查看它支持的参数选项

    C:\mongodb\bin>mongostat.exe --help
    View live MongoDB performance statistics.

    usage: mongostat.exe [options] [
    sleep time]
    sleep time: time to wait (in seconds) between calls
    options:
    --help produce help message
    -v [ --verbose ] be more verbose (include multiple times
    for more verbosity e.g. -vvvvv)
    --version print the program's version and exit
    -h [ --host ] arg mongo host to connect to ( <set
    name
    >/s1,s2 for sets)
    --port arg server port. Can also use --host
    hostname:port
    --ipv6 enable IPv6 support (disabled by
    default)
    -u [ --username ] arg username
    -p [ --password ] arg password
    --authenticationDatabase arg user source (defaults to dbname)
    --authenticationMechanism arg (=MONGODB-CR)
    authentication mechanism
    --noheaders don't output column names
    -n [ --rowcount ] arg (=0) number of stats lines to print (0 for
    indefinite)
    --http use http instead of raw db connection
    --discover discover nodes and display stats for
    all
    --all all optional fields

    ......

用户安全认证

在MongoDB中,每个数据库都对应不同的文件,所以可以很方便的管理每个数据库的权限。这里,我们就试试MongoDB的用户安全认证。

首先启动一个MongoDB实例,然后通过MongoDB shell建立两个数据库test1,test2,并且插入一些测试数据,

mongod.exe --dbpath="c:\mongodb\db\mtest"
> use test1
switched to db test1
> for(var i=0;i<10;i++){
... var randAge
= parseInt(5*Math.random()) + 20;
... var gender
= (randAge%2)?"Male":"Female";
... db.student.insert({
"sid":i, "

没有评论:

发表评论