建立,SQLSERVER实现
CREATE TABLE dbo服装 (
id int IDENTITY (1, 1) NOT NULL ,
标题 varchar (50) ,
说明 text ,
存放路径 varchar (50),
尺寸 varchar (50),
其它属性 varchar (50)
)
*** 作:
前台语言编写,可按标题等属性查询,或通过GRID控件显示列表,通过调入的存放路径和文件名字串调入到控件显示。
GIS项目所需的数据是以不同的格式分散存储在不同的目录下。为了进行分析,必须找到数据,从中获得所需要的信息,并将它复制到合适的工作空间中去。使用ArcGIS软件ArcCatalog,能够高效地浏览和组织所需的数据。 通过组织GIS项目数据库来存放获得的或创建的数据。将使用ArcGIS软件ArcCatalog来预览和复制数据,创建文件夹来存储数据,并创建图层来显示远程数据。使用Catalog目录树下的一个目录来组织项目数据库,可以更容易地找到所需数据。
组织GIS项目数据库的方法有多种。其中一个较好的方法就是创建一个单独的project文件夹,然后用其部分子文件夹来存储输入数据,用其它子文件夹来存储分析过程中产生的数据集。
与其他众多的GIS项目一样,GIS项目所需数据来自于多种数据源。其中部分数据具有不同的数据格式或不同的坐标系统。大多数数据已经收集好了。下表列出了所使用数据的当前位置。
用户将复制这些数据(保留原始数据作为备份),将其放到一个单独的project文件夹,这样获取比较方便。还需要创建一个新的文件夹,用以存储分析过程中产生的数据。
并没有一个统一的方法构造GIS项目数据库;选择什么样的方法合适,很大程度上取决于个人偏好。创建的目标是:使数据集的重复最小,数据组织合理,易于访问。这样有助于在项目分析过程中以及以后重新查看项目时,避免产生混淆。在硬盘上创建文件夹及移动数据集前,最好画出project文件夹结构草图。
City_share、County_share,和State_share文件夹存储在本地机上,但可以通过网络共享这些文件夹。可以使用ArcGIS来管理和显示网络中任何共享驱动器上的GIS数据。
用户还需要考虑如何给新创建的数据集命名,并创建命名规范。使用有意义的名字可以让我们一看就知道这个数据集的内容是什么。例如,如果我们合并两地块的数据集,可以将新产生的地块数据集命名为parcel01mrg,以此来表明这是第一个新产生的地块数据集,并且是通过合并 *** 作得来的。如果随后编辑数据集,可以将编辑后的数据集命名为parcel02edt,等等。
使用ArcGIS软件ArcCatalog来复制含有共享文件的文件夹到一个新位置,这样在复制数据 *** 作时,保持原始数据不变。接下来,创建新的个人数据库来存储将要创建的新数据集。另外,还要创建两个新文件夹:一个用来存储该城市的GreenvalleyDB地理数据库的图层;另一个用来存储分析过程中产生的新图层。步骤如下:
1复制project文件夹;
2创建与project文件夹的连接;
3在project文件夹中创建WaterProject个人地理数据库;
4在project文件夹中新建City_layers文件夹;
5在project文件夹中新建Analysis文件夹。
复制project文件夹
project文件夹中包含有其它部门与用户共享的数据。可以将整个project文件夹复制到本地硬盘中。
1单击Start,指向Programs,指向ArcGIS,并单击ArcCatalog。
2打开ArcGIS\ArcTutor\Getting_Started文件夹,双击该文件夹,查看其内容。
3单击project文件夹,然后按住Ctrl键,将文件夹从当前位置拖放到本地硬盘C盘,或其它分区或文件夹。
把文件夹拖到另一驱动器(如从C盘拖到D盘),将把该文件夹及其内容复制到新位置。如果在同一驱动器拖动文件夹到一个新位置,只是移动文件夹。要在同一驱动器里复制文件夹,在拖动文件夹的同时,按住Ctrl键即可。
4ArcGIS复制完数据后,在Catalog目录树中单击C:\ ,在Catalog窗口右边查看C:\中的内容。
可以看到project文件夹在列表中。
现在,已经复制了project文件夹,就可以在不改变原始数据情况下对复制数据进行 *** 作。
建立与project文件夹的连接
如果在一个驱动器上有许多文件夹,用鼠标拖动滚动条来找到某个文件夹会非常繁琐。建立文件夹的一个连接会很方便。下面为project文件夹创建一个连接。
1在教程中,我们通过单击Connect to Folder建立文件夹的连接并浏览该文件夹,下面介绍一个快速方法:
2单击List按钮 ,指向Catalog窗口右边的project文件夹(需选择contents选项);
3单击project文件夹并拖放到位于Catalog目录树顶部的Catalog目录中;
新的C:\project文件夹连接就显示在Catalog目录树中了。
这个连接是project文件夹的一个快捷方式。在下面的项目分析中,我们可以使用这个连接访问project文件夹的数据。
创建个人地理数据库
接下来,我们将在project文件夹中创建一个个人地理数据库来存储更新的和项目过程中新创建的数据集。使用地理数据库是存储、获取和管理数据的一种有效方法。
1单击刚才创建的project文件夹连接,在Catalog右边的窗口查看其内容。
2.右键单击project文件夹连接,指向New,然后单击Personal Geodatabase。
如果正在使用ArcInfo,可以看到其他选项。
在Catalog窗口的右边列出了新的地理数据库,并高亮显示其名称(New Personal Geodatabase)。
3. 在高亮显示的文本上,重命名数据库为“WaterProject”,并按Enter键。
创建City_layers文件夹和Analysis文件夹
现在我们要在project文件夹下创建两个新的文件夹,用来存储该城市的GreenvalleyDB地理数据库中的图层以及在分析过程产生的新的图层。
1. 右击project文件夹,指向New,单击Folder。
在Catalog窗口的右边,列出了高亮显示文件名为New Folder的新文件夹。
2. 在高亮显示的文本上,键入“City_layers”重命名该文件夹。按Enter键。
以同样的方式创建Analysis文件夹。
3. 右击project文件夹,指向New,单击Folder,重命名文件夹为“Analysis”。
如果新文件夹的位置错误或名字拼写错误,只需右击该文件夹,单击Delete或Rename,然后重新开始。
背景
MySQL 一直以来都有 TEXT、BLOB 等类型用来存储、视频等大对象信息。比如一张,随便一张都 5M 以上。视频也是,随便一部视频就是 2G 以上。
假设用 MySQL 来存放**视频等信息,一部是 2G,那么存储 1000 部就是 2TB,2TB 也就是 1000 条记录而已,但是对数据库性能来说,不仅仅是看记录数量,更主要的还得看占用磁盘空间大小。空间大了,所有以前的经验啥的都失效了。
所以一般来说存放这类信息,也就是存储他们的存放路径,至于文件本身存放在哪里,那这就不是数据库考虑的范畴了。数据库只关心怎么来的快,怎么来的小。
举例
虽然不推荐 MySQL 这样做,但是也得知道 MySQL 该怎么做才行,做到心里有数。比如下面一张微信,大概 5M 的样子。
root@ytt:/var/lib/mysql-files# ls -sihl 微信_20190711095019jpg274501 54M -rw-r--r-- 1 root root 54M Jul 11 07:17 微信_20190711095019jpg
拷贝 100 份这样的来测试
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信_20190711095019jpg "$i"jpg;done;
root@ytt:/var/lib/mysql-files# ls
100jpg 17jpg 25jpg 33jpg 41jpg 4jpg 58jpg 66jpg 74jpg 82jpg 90jpg 99jpg f8tsv
10jpg 18jpg 26jpg 34jpg 42jpg 50jpg 59jpg 67jpg 75jpg 83jpg 91jpg 9jpg 微信_20190711095019jpg
1111jpg 19jpg 27jpg 35jpg 43jpg 51jpg 5jpg 68jpg 76jpg 84jpg 92jpg f1tsv
11jpg 1jpg 28jpg 36jpg 44jpg 52jpg 60jpg 69jpg 77jpg 85jpg 93jpg f2tsv
12jpg 20jpg 29jpg 37jpg 45jpg 53jpg 61jpg 6jpg 78jpg 86jpg 94jpg f3tsv
13jpg 21jpg 2jpg 38jpg 46jpg 54jpg 62jpg 70jpg 79jpg 87jpg 95jpg f4tsv
14jpg 22jpg 30jpg 39jpg 47jpg 55jpg 63jpg 71jpg 7jpg 88jpg 96jpg f5tsv
15jpg 23jpg 31jpg 3jpg 48jpg 56jpg 64jpg 72jpg 80jpg 89jpg 97jpg f6tsv
16jpg 24jpg 32jpg 40jpg 49jpg 57jpg 65jpg 73jpg 81jpg 8jpg 98jpg f7tsv
我们建三张表,分别用 LONGBLOB、LONGTEXT 和 VARCHAR 来存储这些信息
mysql> show create table tt_image1G
1 row
Table: tt_image1
Create Table: CREATE TABLE `tt_image1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` longblob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (000 sec)
mysql> show create table tt_image2G
1 row
Table: tt_image2
Create Table: CREATE TABLE `tt_image2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` longtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (000 sec)
mysql> show create table tt_image3G
1 row
Table: tt_image3
Create Table: CREATE TABLE `tt_image3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (000 sec)
我们来给三张表插入 100 张(插入前,建议把 max_allowed_packet 设置到最大)
tt_image1
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqldsock -e "insert into ytttt_image1(image_file)
values (load_file('/var/lib/mysql-files/$ijpg'))";done;
tt_image2
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqldsock -e "insert into ytttt_image2(image_file)
values (hex(load_file('/var/lib/mysql-files/$ijpg')))";done;
tt_image3
root@ytt:/var/lib/mysql-files# aa='begin;';for i in `seq 1 100`;
do aa=$aa"insert into ytttt_image3(image_file) values
('/var/lib/mysql-files/$ijpg');";
done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqldsock -e "`echo $aa`";
检查下三张表记录数
mysql> select 'tt_image1' as name ,count() from tt_image1 union allselect 'tt_image2',count() from tt_image2 union all select 'tt_image3', count() from tt_image3;+-----------+----------+| name | count() |+-----------+----------+| tt_image1 | 100 || tt_image2 | 100 || tt_image3 | 100 |+-----------+----------+3 rows in set (000 sec)看下文件大小,可以看到实际大小排名,LONGTEXT 字段存储的最大,LONGBLOB 字段缩小到一半,最小的是存储路径的表 tt_image3。所以这里从存储空间来看,存放路径最占优势。
root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image274603 11G -rw-r----- 1 mysql mysql 11G Jul 11 07:27 tt_image2ibd274602 545M -rw-r----- 1 mysql mysql 544M Jul 11 07:26 tt_image1ibd274605 80K -rw-r----- 1 mysql mysql 112K Jul 11 07:27 tt_image3ibd那么怎么把取出来呢?
tt_image3 肯定是最容易的
mysql> select from tt_image3;+----+----------------------------+| id | image_file |+----+----------------------------+| 1 | /var/lib/mysql-files/1jpg |+----+----------------------------+100 rows in set (000 sec)tt_image1 直接导出来二进制文件即可,下面我写了个存储过程,导出所有。
mysql> DELIMITER $$mysql> USE `ytt`$$mysql> DROP PROCEDURE IF EXISTS `sp_get_image`$$mysql> CREATE DEFINER=`ytt`@`localhost` PROCEDURE `sp_get_image`()mysql> BEGIN DECLARE i,cnt INT DEFAULT 0; SELECT COUNT() FROM tt_image1 WHERE 1 INTO cnt; WHILE i < cnt DO SET @stmt = CONCAT('select image_file from tt_image1 limit ',i,',1 into dumpfile ''/var/lib/mysql-files/image',i,'jpg'''); PREPARE s1 FROM @stmt; EXECUTE s1; DROP PREPARE s1; SET i = i + 1; END WHILE; END$$mysql> DELIMITER ;mysql> call sp_get_image;tt_image2 类似,把 select 语句里 image_file 变为 unhex(image_file) 即可。
总结
这里我举了个用 MySQL 来存放的例子,总的来说有以下三点:
占用磁盘空间大(这样会带来各种各样的功能与性能问题,比如备份,写入,读取 *** 作等)
使用不易
还是推荐用文件路径来代替实际的文件内容存放
可以是文本,也可以是image,jpeg等多种类型。
1、信息数据库表中的Image数据类型可以进行数据的存储,保存的是二进制字节,所以写入数据库Image数据类型时,数据库自动将转换成二进制字节后存入,从数据库Image数据类型读取内容时,则是将二进制字节先转换成,然后再输出。
2、但是通常不会直接把保存到数据库中,而是将文件保存到某个文件夹内,在数据库存储对应的存放路径,这样存储比较方便一些。友友们可以试一下,希望能够帮到您。
以上就是关于如何建立一个图片数据库我公司有跟多种类的图片,大概能分三大类,十多小类,现在比较乱,我想整理一下全部的内容,包括:如何建立一个图片数据库我公司有跟多种类的图片,大概能分三大类,十多小类,现在比较乱,我想整理一下、怎样根据已有分类图用gis建立数据库、MySQL里存储图片的是什么数据类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)