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

如何在phantomjs中实现快速,可查询和持久的数据库?

如何解决《如何在phantomjs中实现快速,可查询和持久的数据库?》经验,为你挑选了1个好方法。

我一直在使用phantomjs在服务器端dom环境中为我做一些繁重的工作.直到现在我一直把数据结构放在内存中(即对它们没什么特别的),一切都很好.但最近在一些用例中我开始遇到以下问题:

    内存使用率变得太高,导致交换启动并严重影响我的性能.

    无法从上一个保存点恢复,因为内存中的数据结构不是持久的(显然)

这迫使我寻找一个用于幻像的数据库解决方案,但在决定解决方案时我又遇到了问题:

    我不希望我的表演太受影响.

    它必须是持久的和可查询的

    我怎么能从幻像脚本里面连接数据库.

谁能引导我找到满意的解决方案?

注意:我几乎已经决定,sqlite但从幻影连接到它仍然是一个问题.Nodejs提供sqlite3节点模块,我正在尝试browserify使用幻像.

注意注意: Browserify没有用!回到地面零!:-(

Thanx提前!



1> 小智..:

Phantomjs的文件系统API允许您读取和写入二进制文件:

buf = fs.read(FILENAME, 'b') and
fs.write(FILENAME, buf, 'b')

sql.js(https://github.com/kripken/sql.js/)为您提供了一个可以在phantomjs中运行的Javascript SQLite实现.

结合2,您就拥有了一个快速,持久,可查询的SQL数据库.

示例演练

    获取Javascript SQLite实现(保存到/tmp/sql.js)

    $ wget https://raw.githubusercontent.com/kripken/sql.js/master/js/sql.js -O /tmp/sql.js

    使用命令行sqlite3应用程序创建一个测试SQLite数据库(显示它是持久的并且在phantomjs应用程序外部).

    sqlite3 /tmp/eg.db

    sqlite> CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY AUTOINCREMENT,创建INTEGER NOT NULL DEFAULT CURRENT_TIMESTAMP);

    sqlite> .quit

    保存此测试phantomjs脚本以将条目添加到测试数据库并验证行为.

$ cat /tmp/eg.js

var fs = require('fs'),
    sqlite3 = require('./sql.js'),                                                                    
    dbfile = '/tmp/eg.db', 
    sql = 'INSERT INTO test(id) VALUES (NULL)', 
    // fs.read returns binary 'string' (not 'String' or 'Uint8Array')
    read = fs.read(dbfile, 'b'), 
    // Database argument must be a 'string' (binary) not 'Uint8Array'
    db = new sqlite3.Database(read),              
    write,
    uint8array;                                                                                       

try {   
    db.run(sql);
} catch (e) {
    console.error('ERROR: ' + e);                                                                     
    phantom.exit();                                                                                   
}

// db.export() returns 'Uint8Array' but we must pass binary 'string' to write
uint8array = db.export(); 
write = String.fromCharCode.apply(null, Array.prototype.slice.apply(uint8array));                     

fs.write(dbfile, write, 'b');                                                                         
db.close();                                                                                           

phantom.exit();

    运行phantomjs脚本进行测试

    $ /usr/local/phantomjs-2.0.0-macosx/bin/phantomjs /tmp/eg.js

    使用外部工具验证更改是否持久.

    sqlite3 /tmp/eg.db

    sqlite> SELECT*FROM test;

    id已创建

    1 2015-03-28 10:21:09

    sqlite的>

要注意的一些事项:

    仅当您调用fs.write时,才会在磁盘上修改数据库.在您调用fs.write之前,您所做的任何更改对访问同一SQLite数据库文件的外部程序都是不可见的.

    使用fs.read将整个数据库读入内存.您可能希望为不同的表(或表的版本)提供不同的OS文件,具体取决于您的应用程序和表中的数据量,以满足您提到的内存要求.

    将sqlite3.export()返回的内容传递给fs.write会破坏磁盘上的SQLite数据库文件(它将不再是有效的SQLite数据库文件).Uint8Array不是fs.write参数的正确类型.


推荐阅读
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 基于试题数据的智能化管理平台采用Java语言进行面向对象编程,旨在构建一个高效的试题信息管理系统。该系统在JDK 6.0和MyEclipse 10.6环境下开发,通过优化试题数据管理和处理流程,提升系统的稳定性和用户体验。平台支持多用户操作,具备强大的数据处理能力和灵活的扩展性,适用于各类教育机构和考试组织。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 本文提供了在Windows系统上部署和启动MySQL免安装版本的详细步骤。首先,从MySQL官方网站下载社区版免安装包(https://dev.mysql.com/downloads/mysql/8.0.html),将其解压至指定目录,例如D:\tools\mysql。接着,配置系统环境变量,确保MySQL命令行工具可以在任意路径下使用。此外,还需创建并配置my.ini文件以设置MySQL的基本参数,确保数据库服务能够顺利启动和运行。 ... [详细]
author-avatar
侯贵聪_680
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有